Swiftui 如何从视图中检测对BindableObjects的更改?

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

在UIKit中,我会有如下代码:

@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不允许观察属性。