1

假设我们有以下目标:

  1. 我们想使用演员。
  2. 我们想使用依赖注入并通过 DI 解析参与者。
  3. 我们希望将我们的参与者隐藏在接口后面,以便我们可以改变实现。
  4. 我们想要保持actor的隔离,否则使用actor就没有意义了。

所以具体的问题是:我们如何在保持隔离的同时使 Swift Actor 符合协议?

protocol Zippity {
  func foo()
}

actor Zappity: Zippity {
  func foo() {} // Doesn't compile
}

我可以让它编译…</p>

actor Zappity: Zippity {
  nonisolated func foo() {}
}

……但这似乎违背了目的。我也尝试过声明接口方法async,但也没有编译。

我可以想到几种合理的解决方法,包括组合、nonisolated async调用隔离方法的方法等,但想看看是否有我遗漏的东西。

4

1 回答 1

2

好的,我已经找到了答案,而且非常简单:

protocol Zippity: Actor {
  func foo()
}

actor Zappity: Zippity {
  func foo() // This is a properly isolated method
}

似乎声明符合Actor协议使编译器具有魔力。

于 2022-01-07T14:44:36.087 回答