我有一个TextField
用户可编辑的,但也可以通过对ViewModel
.
然而,似乎有一些神秘的魔法决定了我何时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
?