SwftUI中的屬性包裝器(綁定屬性)

@State,@StateObject,@ObserverdObject,@EnvironmentObject
當(dāng)被觀察屬性變化時(shí),都會(huì)觸發(fā)視圖刷新

1.@State:

用于管理視圖內(nèi)部的值類型數(shù)據(jù):

struct CounterView : view{
  @state private var count = 0
  var body :some View{
    VStack{
      Text("Count:\(count)")
      Button(action:{
        count += 1
      }){
        Text("count++")
       }
      }
    }
}  

2.@StateObject

用于管理本視圖的ObservableObject狀態(tài)對象,它負(fù)責(zé)創(chuàng)建和持有一個(gè)ObservableObject實(shí)例,ObservableObject類的屬性用@Published聲明該屬性可被觀察,沒有@Published包裝的屬性變化會(huì)被忽視

class CounterModel : ObservableObject{
 @Published var count = 0
}
struct CounterView : View{
   @StateObject private variable counter = CounterModel()
   var body : some View{
       VStack{
           Text("Count:\(count)")
           Button(action:{
             counter.count += 1
           }){
             Text("count++")
           }
       }
   }

3.@ObservableObject

用于引用由其他視圖或外部管理的ObservableObject實(shí)例,比如父視圖傳遞給子視圖的ObservableObject參數(shù)。它不會(huì)創(chuàng)建或持有對象。同樣ObservableObject類的聲明中,需要被觀察的屬性需要用@Published包裝。

4.@EnvironmentObject

用于在視圖層次結(jié)構(gòu)中共享對象,被標(biāo)記的@EnvironmentObject對象可以在整個(gè)視圖層次結(jié)構(gòu)中注入和訪問,而無需顯示地傳遞它。同樣ObservableObject類的聲明中,需要被觀察的屬性需要用@Published包裝。
必須在視圖層次結(jié)構(gòu)的根視圖中,使用environmentObject()注入對象。

class CounterModel: ObservableObject {
    @Published var count = 0
}
struct CounterView: View {
    @EnvironmentObject var counter: CounterModel
    var body: some View {
        VStack {
            Text("Count: \(counter.count)")
            Button(action: {
                counter.count += 1
            }) {
                Text ("Increment")
            }
        }
    }
}
// 使用示例
struct ContentView: View {
    @Stateobject private var counter = CounterModel()
    var body: some View {
        VStack{
            CounterView()
        }
        .environmentObject(counter)
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容