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

@State 关联View的状态,当@State修饰的属性改变时,对应的View会跟着刷新,符合MVVM的设计理念

 @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修饰后属性传递就变成引用类型,适合用于子节点关系中

@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("改变收藏状态")
        }
    }
}

@ObservedObject 这是用来修饰自定义对象的,用@ObservedObject修饰这个对象时,这个对象必须实现 ObservableObject 协议,然后用 @Published 修饰对象里属性,表示这个属性是可以被 SwiftUI 监听的

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 用来从当前view的环境变量中获取ObservableObject值

还有 41% 的精彩内容
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
支付 ¥8.88 继续阅读

相关阅读更多精彩内容

友情链接更多精彩内容