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