有协议Reactiveable,它有方法" reactiveViewModel()"返回视图模型
protocol Reactiveable {
associatedtype R
func reactiveViewModel() -> R?
}
有协议Bindable,它具有属性" viewModel"和相关类型
protocol Bindable {
associatedtype VM: ViewModel
var viewModel: VM? { get set }
}
基本视图控制器具有泛型类型:
class ViewController<T: ViewModel>: UIViewController, Reactiveable {
typealias R = T
}
有基本视图控制器的孩子:
class MainViewController: ViewController<MainViewModel>, Bindable {
typealias VM = MainViewModel
var viewModel: MainViewModel? = MainViewModel()
我已经为Reactiveable协议写了两个扩展名。第一个实现只返回nil,第二个返回View Model,如果Self:Bindable。
extension Reactiveable {
func reactiveViewModel() -> R? {
return nil
}
}
extension Reactiveable where Self: Bindable {
func reactiveViewModel() -> VM? {
return self.viewModel
}
}
但是当我运行我的应用程序并打开屏幕MainViewController时,它总是调用第一个实现并返回nil。为什么?实际上 - MainViewController:Bindable!