美文网首页Android技术交流ios技术交流
SwiftUI篇-4 注解@State、@Binding、@Ob

SwiftUI篇-4 注解@State、@Binding、@Ob

作者: 浪人残风 | 来源:发表于2021-02-27 16:12 被阅读0次

@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值

相关文章

网友评论

    本文标题:SwiftUI篇-4 注解@State、@Binding、@Ob

    本文链接:https://www.haomeiwen.com/subject/zzcufltx.html