原文链接:https://github.com/fzhlee/SwiftUI-Guide#-%E7%AC%AC4%E8%8A%82objectbinding-
@ObservableObject标记和@State标记的功能相似,不同之处是:@ObservableObject是用来修饰对象的。
示例代码:
class UserModel: ObservableObject {
//如果用@ObservableObject标记修饰一个对象,那么这个对象必须要遵循ObservableObject协议。所以在此定义一个类,并且该类遵循这个协议
@Published var nickName: String = "" //@Published标记和@ObservableObject是配合使用的,用来修饰遵循可观察对象协议的类的属性,表示这个属性需要被SwiftUI监听
}
struct ContentView : View {
@ObservedObject var model = UserModel() //添加一个实例属性用来进行数据的传递,并给它添加@ObservedObject标记,从而使实例的nickName属性可以与视图进行绑定
@State var isPresented = false //标识是否弹出警告窗口
let dismiss = Alert.Button.default(Text("OK")) {} //初始化一个警告窗口里的按钮,并设置按钮的标题文字
var alert: Alert { //表示一个警告窗口
Alert(title: Text("Your nickname"), //初始化一个警告窗口,并设置它的标题、信息和关闭按钮。其中信息内的文字和实例对象的NickName属性进行了绑定
message: Text("\(self.model.nickName)"),
dismissButton: dismiss)
}
var body: some View {
VStack {
TextField("Your nickname", text: $model.nickName)
.padding()
Button(action: {
self.isPresented = true
}) {
Text("Show")
}.alert(isPresented: $isPresented) { () -> Alert in
alert
}
}
}
}
网友评论