SwiftUI 什麼是@State?

內個..由於前陣子刷題有點刷膩了😝
所以開始研究一下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 ,紅色的錯誤就會消失了

參考文章:

https://developer.apple.com/documentation/swiftui/state

--

--

LULU
彼得潘的 Swift iOS App 開發教室

Hi👋 I’m iOS developer, I hope I can grow with you guys ☺️ Let’s learn more together.