美文网首页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