协议继承和打字不理解

时间:2018-05-16 09:58:53

标签: swift swift-protocols

我有点困惑。请看这个例子。

我创建了一个VM协议:

protocol VM {

}

此协议正在我的VC实现中使用

final class VC: UIViewController {
    let viewModel: VM
}

现在我创建了特殊的新协议

protocol AwesomeProtocol {

}

protocol AwesomeViewProtocol {
     var viewModel: AwesomeProtocol { get }
}

我的想法是使用VM展开Awesomeness所以:

protocol VM: AwesomeProtocol {

}

final class VC: UIViewController, AwesomeViewProtocol {
    let viewModel: VM
}

但在这里我遇到了编译错误:

  

输入' VC'不符合协议' AwesomeViewProtocol'

尽管VM延伸AwesomeProtocol

有人可以解释我做错了什么?

1 个答案:

答案 0 :(得分:1)

你必须实现这个。

final class VC: UIViewController, AwesomeViewProtocol {
    var viewModel: AwesomeProtocol
}

计算变量接近函数。它们的签名在父和子(继承)类/协议中必须相同。

如果您需要某些摘要,请改用assosiatedtype和泛型类。