假设我们有以下目标:
- 我们想使用演员。
- 我们想使用依赖注入并通过 DI 解析参与者。
- 我们希望将我们的参与者隐藏在接口后面,以便我们可以改变实现。
- 我们想要保持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
调用隔离方法的方法等,但想看看是否有我遗漏的东西。