Как обнаружить изменения в BindableObjects из представления? - PullRequest
0 голосов
/ 16 июня 2019

В 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, когда пользователь вводит текст в TextField, но как мне получить свойство dateModified для обновления одновременно?

Ответы [ 2 ]

0 голосов
/ 30 июня 2019

Используйте инициализатор TextField, который включает onEditingChanged и включите любой код обновления, который вам нужен, в замыкание.

TextField($thisCategory.myName, placeholder: nil, onEditingChanged: { (changed) in
                    self.thisCategory.modified()
                    self.dataStack.didChange.send(self.dataStack)
                }).textFieldStyle(.roundedBorder)
0 голосов
/ 16 июня 2019

Вы можете добавить didSet наблюдатель к свойству myName в объявлении типа элемента и затем вызвать modified оттуда:

var myName: String = "" {
            didSet {
                self.modified()
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...