在我看來,我正在嘗試實作一個由函式回傳的按鈕buttonView()。該按鈕顯示布林值是 true、false 還是 nil。按鈕從 nil 開始,每次單擊按鈕時都會在 true 和 false 之間切換,更新視圖以顯示 bool 的最新值。
問題:顯示布爾最新值的文本在單擊時不會更改/更新。
有趣的是,當同一個按鈕沒有放在函式中而是放在視圖本身中時,它可以正常作業/更新。
以下 SwiftUI 代碼顯示了我正在使用的代碼。(我在 macOS Monterey 上使用 XCode 13.2.1)
struct TestView: View {
var body: some View {
buttonView()
}
func buttonView() -> some View {
@State var testBool: Bool? // THE BOOL CHANGING/BEING SHOWN
return Button(action: {
testBool = Bool.random() // SETS BOOL VALUE ON CLICK
}, label: {
VStack {
Text("click me")
Text(testBool == nil ? "nil" : String(testBool!)) //DISPLAYS BOOL VALUE
}
})
}
}
uj5u.com熱心網友回復:
您已在成員函式內部@State定義。相反,它應該在您的頂層定義- 這是它保留/更新狀態的唯一方法。最小的作業變化是這樣的:View
struct TestView: View {
@State var testBool: Bool? //<-- Here
var body: some View {
buttonView()
}
func buttonView() -> some View {
Button(action: {
testBool = Bool.random()
}, label: {
VStack {
Text("click me")
Text(testBool == nil ? "nil" : String(testBool!))
}
})
}
}
讓它看起來有點 Swift 的進一步重構可能是:
struct TestView: View {
@State var testBool: Bool?
var body: some View {
Button(action: {
testBool = Bool.random()
}) {
VStack {
Text("click me")
if let testBool = testBool {
Text(testBool ? "true" : "false")
} else {
Text("nil")
}
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/443570.html
上一篇:自動密鑰加密
下一篇:SwiftUI中的時間間隔
