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

时间:2019-06-16 10:50:36

标签: swiftui

在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)

说明性的,简洁的。当用户在TextField中输入内容时,SwiftUI会负责更新myName属性,但是如何获取dateModified属性来同时更新?

3 个答案:

答案 0 :(得分:0)

使用包含TextField的{​​{1}}初始化程序,并在闭包中包含所需的任何更新代码。

onEditingChanged

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

您可以在项目类型声明的didSet属性中添加myName观察者,然后从此处调用modified

var myName: String = "" {
            didSet {
                self.modified()
            }
        }