协议扩展工作错误

时间:2017-09-30 15:05:59

标签: ios swift generics protocols

有协议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!

0 个答案:

没有答案