У меня есть TextField
, который редактируется пользователем, но может также обновляться изменениями в ViewModel
.
Похоже, что некоторые магические маги c определяют, когда мои TextField
обновления сам по себе, однако.
Вот игровая площадка:
import Combine
import SwiftUI
class ViewModel: ObservableObject {
@Published var text: String = "0"
private var cancellables: [AnyCancellable] = []
init() {
// output what the value of `text` is, whenever it changes
let c = $text.print().sink { _ in }
cancellables.append(c)
}
func fetch() {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
self.text += "3"
}
}
deinit { print("deinit") }
}
struct V: View {
@ObservedObject var viewModel = ViewModel()
init() {
viewModel.text += "1"
}
var body: some View {
TextField("TextField", text: $viewModel.text)
.onAppear { self.viewModel.text += "2" }
.onAppear { self.viewModel.fetch() }
}
}
var v: V? = V()
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
v = nil
}
Я могу видеть из print()
в ViewModel.init()
, что ViewModel.text
обновляется, как и ожидалось. Конечное значение: 0123
.
Что я не понимаю: почему значение TextField
перестает обновляться, когда оно достигает 012
?