现在,我遇到了注册符合ObservableObject
的协议的问题。由于ObservableObject
使用关联的类型,所以我找不到一种注册它而不出现编译错误的方法。
这是我的简单模型,叫做
protocol A: ObservableObject {}
这是我的一个简单类,叫做B
final class B: A {}
这是我的组装
final class ViewStoreAssembly: Assembly{
func assemble(container: Container) {
container.register(A.self) { _ in
B()
}
}
}
我正试图将A注册到ObservableObject,但编译错误显示
协议"A"只能用作通用约束,因为它具有自身或相关类型要求
有人知道如何解决这个问题吗?这样做的好处将是
- 在SwiftUI中,我们可以将视图从ViewStore/presenter中解耦,以便将视图与viewModel持有者分离
- ViewStore/PPresenter可以通过模拟视图轻松进行测试
最好使用以下组合(无论如何,ObservableObject
只对类有意义,它对模型协议本身没有任何影响,也不可能在协议周围有像ObservedObject
这样的观测器(
protocol A {}
final class B: ObservableObject, A {}
我认为以下主题也会有所帮助:
如何将协议定义为@ObservedObject属性的类型?
如果@EnvironmentObject,如何创建Generic?