SwiftUI 什麼是@State?
Published in
May 13, 2022
內個..由於前陣子刷題有點刷膩了😝
所以開始研究一下SwiftUI(⁎⁍̴̛ᴗ⁍̴̛⁎)
哎呀我的天一開始看這官方文件真的超級矇QQ
簡單來說,SwiftUI 用狀態決定如何顯示和更新畫面。
由於一開始在初始化(init)標記為 @State 時,並沒有實際創建出一個變數,而是提示 SwiftUI 在後台創建“某物”來存儲設置的內容並從現在開始對其進行監控。
因此@State var 僅充當訪問此wrapper的delegate
每次寫入 @State 變數時,SwiftUI 都會知道它正在監視它。 它還將知道 @State 變數是否是從View中讀取的。 能夠在更改此變數後重新計算在其主體中引用了 @State 變數的View。
example:
struct CardView: View {
var isFaceUp: Bool = true
var body: some View {
ZStack {
let shape = RoundedRectangle(cornerRadius: 20.0)
if card.isFaceUp {
shape.fill().foregroundColor(.white)
shape.strokeBorder(lineWidth: 3)
Text("🚀").font(.largeTitle)
} else {
shape.fill()
}
}.OnTapGesture {
isFaceUp = !isFaceUp
}
}
}
❌此時 isFaceUp = !isFaceUp的地方會出現Cannot assign to property: ‘self’ is immutable的錯誤
因為在執行 if isFaceUp的時候變數還沒有被創建
此時只要在 var isFaceUp: Bool = true 的前面加上@State ,紅色的錯誤就會消失了
參考文章: