如果我们有一个简单的协议和类实现,如下所示;
protocol Solution: ObservableObject {
var result: String { get set }
func calc() async
}
@MainActor
class Solve: Solution {
@Published
var result: String = ""
func calc() async { // operate on actors to find the result
result = "the answer"
}
}
Run Code Online (Sandbox Code Playgroud)
Xcode 将显示黄色警告:“Main actor-isolated property 'result'不能用于满足非隔离协议要求”针对结果的类定义。
删除 @MainActor 将删除警告,但随后我们需要手动Dispatch
更新结果以确保它们在主线程上完成。有没有更干净的方法来做到这一点?也许通过修改协议?
lor*_*sum 11
添加MainActor
到protocol
@MainActor
protocol Solution: ObservableObject {
var result: String { get set }
func calc() async
}
Run Code Online (Sandbox Code Playgroud)
我actor
也想看一下,这完全取决于这样做的目的class
。
如果其目的是更新 UI,那么包装该类是很自然的。
归档时间: |
|
查看次数: |
2268 次 |
最近记录: |