【发布时间】:2019-11-11 12:11:17
【问题描述】:
我遇到了 Swift 协议的问题。我有这样的事情:
protocol OnboardingPage {
var viewModel: OnboardingPageViewModel! { get }
}
protocol OnboardingPageViewModel {
func getValue() -> Bool
}
// ---
class FirstNameViewController: UIViewController, OnboardingPage {
var viewModel: FirstNameViewModel!
}
class FirstNameViewModel: OnboardingPageViewModel {
func getValue() -> Bool {
return true
}
}
class GenderViewController: UIViewController, OnboardingPage {
var viewModel: GenderViewModel!
}
class GenderViewModel: OnboardingPageViewModel {
func getValue() -> Bool {
return false
}
}
我有一堆符合OnboardingPage 协议的视图控制器,它们都有一个完全符合OnboardingPageViewModel 协议的视图模型。
但遗憾的是,上面的代码不起作用:它说FirstNameViewController 不确认OnboardingPage 协议,因为它的viewModel 属性类型为FirstNameViewModel 而不是OnboardingPageViewModel - 即使@987654329 @是OnboardingPageViewModel。
我该如何解决这个问题?
【问题讨论】:
-
Type that conforms to protocol和protocol不一样。FirstNameViewModel不是OnboardingPage。还有T!和T不一样。 -
你对 T 的看法是绝对正确的!我修正了我的例子(在我的真实代码中是不同的)。
-
FWIW 你的
getValue功能是模糊的。获得什么价值? -
只是一个展示协议和 2 个实现的例子。我认为的真正问题无关紧要?
标签: swift swift-protocols