@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值
网友评论