Swiftui 如何从视图中检测对BindableObjects的更改?
在UIKit中,我会有如下代码:Swiftui 如何从视图中检测对BindableObjects的更改?,swiftui,Swiftui,在UIKit中,我会有如下代码: @IBOutlet weak var itemNameField: UITextField! @IBAction func itemNameFieldDone(_ sender: UITextField) { thisItem.myName = sender.text ?? thisItem.myName thisItem.modified() } 在模型对象中: func modified() { dateModified = Dat
@IBOutlet weak var itemNameField: UITextField!
@IBAction func itemNameFieldDone(_ sender: UITextField) {
thisItem.myName = sender.text ?? thisItem.myName
thisItem.modified()
}
在模型对象中:
func modified() {
dateModified = Date()
let cds = FoodyDataStack.thisDataStack
uuidUser = cds.uuidUser
uuidFamily = cds.uuidFamily
}
在SwiftUI中:
TextField($thisItem.myName)
声明性的,简洁的。当用户在文本字段中键入时,SwiftUI负责更新
myName
属性,但是如何让dateModified
属性同时更新?您可以在项目类型声明中将didSet
observer添加到myName
属性中,然后从那里调用modified
:
var myName: String = "" {
didSet {
self.modified()
}
}
使用包含
onEditingChanged
的TextField
初始值设定项,并在闭包中包含所需的任何更新代码
TextField($thisCategory.myName, placeholder: nil, onEditingChanged: { (changed) in
self.thisCategory.modified()
self.dataStack.didChange.send(self.dataStack)
}).textFieldStyle(.roundedBorder)
iOS 14
有一个名为onChange
的新修饰符,用于检测任何状态的变化:
struct ContentView: View {
@State var text: String = ""
var body: some View {
TextField("Title", text: $text)
.onChange(of: text, perform: { value in
print(text)
})
}
}
也许在模型里放一个二传手?错误
@NSManaged不允许观察属性
错误@NSManaged不允许观察属性。