use*_*155 6 ios swift swiftui combine property-wrapper
我将模型作为已发布的变量保留在 ViewModel 中,并从视图中观察它。
\n当模型进程进入后台线程时,如果您发布模型值,Xcode 线程检查器将会做出反应。
\n\n\n不允许从后台线程发布更改;确保在模型更新时从主线程发布值 \xe2\x80\x8b\xe2\x80\x8b (通过像 receive (on :) 这样的运算符)。
\n
已发出。
\n@StateObject var viewModel = ViewModel()\nRun Code Online (Sandbox Code Playgroud)\nclass ViewModel: ObservableObject {\n\n @Published var model = Model()\n var thisValue:String {\n return model.thisValue // I want to use this value in view\n }\nRun Code Online (Sandbox Code Playgroud)\nstruct Model {\n var thisValue:String = "value" // I want to change this value on background threads.\nRun Code Online (Sandbox Code Playgroud)\n我想知道如何在主线程中接收模型值,但是\n我不太明白并提出了一个问题。
\n如果你能告诉我,我会很高兴。
\n不太明白你想要做什么。但如果您不满意,DispatchQueue.main.async可以尝试以下选项之一:
struct Model {
var thisValue: String = "value"
}
class ViewModel: ObservableObject {
@Published var model = Model()
var thisValue: String {
model.thisValue
}
func setThisValueInBackground() {
DispatchQueue.global(qos: .background).async {
Just(Model(thisValue: "newValue")).receive(on: RunLoop.main).assign(to: &self.$model)
}
}
}
Run Code Online (Sandbox Code Playgroud)
model并使用属性观察器代替class ViewModelV2: ObservableObject {
var model = Model() {
didSet {
thisValue = model.thisValue
}
}
@Published private(set) var thisValue: String = ""
func setThisValueInBackground() {
DispatchQueue.global(qos: .background).async {
self.model = Model(thisValue: "newValue")
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2016 次 |
| 最近记录: |