【发布时间】:2020-03-15 09:14:09
【问题描述】:
我有一个带有@Published 值的ObservableObject,我如何检测该值是通过TextField 视图更改还是直接设置(例如当Button 被点击时)?
struct ContentView: View {
@ObservedObject var model = Model()
var body: some View {
VStack {
Button("set value") {
self.model.value = "user set value"
}
TextField("value", text: $model.value)
}
}
}
class Model: ObservableObject {
@Published var value = ""
var anyCancellable: AnyCancellable?
init() {
anyCancellable = $value.sink { val in
// if changed by Button then ...
// if changed by TextField then ...
}
}
}
我的真实情况听起来是这样的:当用户更改值时,必须使用新值向服务器发送请求,但服务器也可以用新值响应(在这种情况下,向服务器发出新请求不应该发送),所以我必须区分用户更改值(通过TextField)的情况和服务器更改值的情况。
【问题讨论】:
-
在这两种情况下都没有 changer (或者,如果你喜欢 UIKit 中的 sender),模型直接被改变,通过分配,从某个闭包中,在堆栈上(如
var a = 0; a = 2- 谁是发件人?)。