Kev*_*ers 2 swift swift-protocols
我遇到了 Swift 协议的问题。我有这样的事情:
\n\nprotocol OnboardingPage {\n var viewModel: OnboardingPageViewModel! { get }\n}\n\nprotocol OnboardingPageViewModel {\n func getValue() -> Bool\n}\n\n// ---\n\nclass FirstNameViewController: UIViewController, OnboardingPage {\n var viewModel: FirstNameViewModel!\n}\n\nclass FirstNameViewModel: OnboardingPageViewModel {\n func getValue() -> Bool {\n return true\n }\n}\n\nclass GenderViewController: UIViewController, OnboardingPage {\n var viewModel: GenderViewModel!\n}\n\nclass GenderViewModel: OnboardingPageViewModel {\n func getValue() -> Bool {\n return false\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我有一堆确认协议的视图控制器OnboardingPage,它们都有一个符合协议的视图模型OnboardingPageViewModel协议的视图模型。
但遗憾的是上面的代码不起作用:它说不FirstNameViewController确认OnboardingPage协议,因为它的viewModel属性具有类型FirstNameViewModel而不是OnboardingPageViewModel- 即使FirstNameViewModel是OnboardingPageViewModel.
我该如何解决这个问题?
\n使用关联类型OnboardingPageViewModel 类型 ViewModel
已编辑
protocol OnboardingPage {
associatedtype ViewModel: OnboardingPageViewModel
var viewModel: ViewModel { get }
}
protocol OnboardingPageViewModel {
func getValue() -> Bool
}
class FirstNameViewController: OnboardingPage {
let viewModel: FirstNameViewModel
init(viewModel: FirstNameViewModel) {
self.viewModel = viewModel
}
}
class FirstNameViewModel: OnboardingPageViewModel {
func getValue() -> Bool {
return true
}
}
class GenderViewController: OnboardingPage {
let viewModel: GenderViewModel
init(viewModel: GenderViewModel) {
self.viewModel = viewModel
}
}
class GenderViewModel: OnboardingPageViewModel {
func getValue() -> Bool {
return false
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |