使用 @MainActor 的类的协议实现 - 如何避免警告?

Dis*_*sco 5 swift swiftui

如果我们有一个简单的协议和类实现,如下所示;

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

添加MainActorprotocol

@MainActor
protocol Solution: ObservableObject {
   var result: String { get set }
   func calc() async
}
Run Code Online (Sandbox Code Playgroud)

actor也想看一下,这完全取决于这样做的目的class

如果其目的是更新 UI,那么包装该类是很自然的。