Рассмотрим свойство Realm, stdQty, показанное ниже. Его можно изменить только внутри транзакции записи.
import RealmSwift
import Combine
class ShoppingItems: Object, ObservableObject
let objectWillChange = PassthroughSubject<Void, Never>()
@objc dynamic var stdQty: Double = 1
Невозможно связать stdQty без ошибки в исходном вопросе. Однако вы можете создать вычисляемую переменную, которую можно связать.
var formQty: Double {
get {
return stdQty
}
set {
objectWillChange.send()
if let sr = self.realm {
try! sr.write {
stdQty = newValue
}
}
}
}
Связывание вычисленной переменной работает нормально.
TextField("Quantity (\(shoppingItem.myUnit!.myName))", value: $shoppingItem.formQty, formatter: basicFormat)
.textFieldStyle(RoundedBorderTextFieldStyle())
.keyboardType(.numbersAndPunctuation)
Ограничение ответа: objectWillChange запускается только вычисляемой переменной. Изменения в форме отражаются в форме. Изменения в области еще не вызывают Combine objectWillChange.