我尝试实现一些可以通知其状态更改的存储库。
protocol Observer {
}
actor Repository: Actor {
var observers: [Observer] = []
func add(observer: Observer) {
self.observers.append(observer)
}
}
并为其添加单元测试
func test_get_update() async {
let repository = Repository()
let observer = MockObserver()
await repository.add(observer: observer)
}
并得到警告
在隐式异步调用中传递给执行元隔离示例方法“add(observer:)”的不可发送类型“any Observer”不能跨越执行元边界
但是在主应用程序中没有任何警告。
class Bar {
func foo() async {
let repository = Repository()
let observer = MockObserver()
await repository.add(observer: observer)
}
}
我不明白这个仓库的实现对不对?
1条答案
按热度按时间vwkv1x7d1#
当然,您可以将
Observer
设置为Sendable
类型:但是由于
Sendable
对事物施加了太多的限制,这可能会使实现一个有趣的观察者成为一个挑战。我倾向于使用合并框架中已有的
Observer
实现: