SwiftUI篇-4 注解@State、@Binding、@ObservedObject、@EnvironmentObject、@Environment

@State 關(guān)聯(lián)View的狀態(tài),當(dāng)@State修飾的屬性改變時(shí),對應(yīng)的View會跟著刷新,符合MVVM的設(shè)計(jì)理念

 @State var count: Int = 0
 
 Section(header: Text("@States")) {
                Text("count:\(count)")
                Button("count ++") {
                    self.count = self.count + 1
                }
            }.padding(.bottom, /*@START_MENU_TOKEN@*/10/*@END_MENU_TOKEN@*/)

@Binding swift中值的傳遞是屬于值傳遞類型,使用@Binding修飾后屬性傳遞就變成引用類型,適合用于子節(jié)點(diǎn)關(guān)系中

@State private var showFavorited: Bool = false

Section(header: Text("@Binding")) {
                if showFavorited {
                    Text("收藏")
                } else {
                    Text("不收藏")
                }
                FilterView(showFavorited: $showFavorited)
}.padding(.bottom,10)

struct FilterView: View {
    @Binding var showFavorited: Bool

    var body: some View {
        Toggle(isOn: $showFavorited) {
            Text("改變收藏狀態(tài)")
        }
    }
}

@ObservedObject 這是用來修飾自定義對象的,用@ObservedObject修飾這個(gè)對象時(shí),這個(gè)對象必須實(shí)現(xiàn) ObservableObject 協(xié)議,然后用 @Published 修飾對象里屬性,表示這個(gè)屬性是可以被 SwiftUI 監(jiān)聽的

import Foundation
final class User: ObservableObject {
    @Published private(set) var name: String = "張三"
    var i: Int = 0
    func change() {
        i = i + 1
        if i % 2 == 0 {
            name = "張三"
        } else {
            name = "李四"
        }
    }
}

@ObservedObject var user: User = User()

Section(header: Text("@ObservedObject")) {
                Text("用戶名:\(user.name)")
                Button("修改名稱") {
                    user.change()
                }
            }.padding(.bottom,10)
            

@EnvironmentObject 用來從當(dāng)前view的環(huán)境變量中獲取ObservableObject值

還有 41% 的精彩內(nèi)容
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
支付 ¥8.88 繼續(xù)閱讀

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

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