【发布时间】:2020-01-25 00:09:19
【问题描述】:
您好,我只是想知道是否可以创建一个通用类来确认 ObservableObject 协议,该协议可供多个 ContentView 使用。
如果我能做到这一点,那么我将能够使我的 ContentView 和 Model 类完全通用且可重用。
我想实现的一个例子:
protocol ContentViewModelType: ObservableObject {
var propertyToInitialiseView: [String] { get }
}
struct ContentView: View {
@ObservedObject var viewModel: some ViewModel
var body: some View {
Text("Hello World")
}
}
如果我能做到这一点,任何类都可以实现 ContentViewModelType 并成为 ContentView 的模型,从而使其具有通用性和可重用性。例如
class ViewModel: ObservableObject {
var objectWillChange = PassthroughSubject<ViewModel, Never>()
}
但是当我尝试初始化 ContentView 时,xcode 给了我一个类型错误。
我认为引入一些关键字的全部目的是为了让我们可以使用协议作为类型来处理那些需要关联类型的协议,因此这应该可以工作。但它给出了一个错误。
如果有人有任何关于这个问题的参考资料或知识可以分享,或者可能有解决方案,那就太好了。
提前致谢。
【问题讨论】:
-
protocol ContentViewModelType: ObservableObject... 纠正我,但你不能这样做 -ObservableObject总是是class对象。 -
dfd一个协议可以继承另一个协议。它只是意味着“这个协议需要我祖先的所有东西,而且……”你说得对,ContentViewModelType不符合到ObservableObject。不幸的是,“继承自”和“符合”在 Swift 中拼写相同。 -
这项技术在 WWDC 2020 Structure your app for SwiftUI previews 中得到演示,从 21:13 developer.apple.com/videos/play/wwdc2020/10149/?time=1273
标签: ios swift swiftui xcode11 combine