无法将通用值分配给扩展中的protocol associatedType变量

时间:2016-06-11 10:06:24

标签: ios iphone swift generics protocols

我一直在努力解决这个问题

我正在尝试在Swift上创建绑定结构,以便以简单的方式绑定viewModels和控制器。所以我创建了一个协议,定义了一个存储在控制器上的变量。

protocol DVA_MOVVER_ViewControllerProtocolDelegate {
    associatedtype delegateType : DVA_MOVVER_ViewModelProtocol
    var dva_viewModelDelegate : delegateType? { get set }
}

如您所见,该变量仅限于满足另一个协议,即:

protocol DVA_MOVVER_ViewControllerProtocol {
   func dva_tellViewModel()
   // Some other methods
}

我希望控制器类只实现变量,因此它可以是存储变量。我无法使用扩展程序实现这一目标。

所以,我有第二个协议的扩展来实现绑定并创建一个将变量绑定到控制器的通用方法

extension  DVA_MOVVER_ViewControllerProtocol where Self:DVA_MOVVER_ViewControllerProtocolDelegate  {
    mutating func dva_bindViewModel<T:DVA_MOVVER_ViewModelProtocol>(parameter:T) {

        typealias delegateType = T
        self.dva_viewModelDelegate = parameter
    }
    ...
   // The rest of the DVA_MOVVER_ViewControllerProtocol methods
} 

这就是我被卡住的地方。编译器说“ 不能指定'T'类型的值来键入'_?' ”。我假设这可能是因为它无法在编译时解析参数类型,但我不知道如何解决这个问题......

1 个答案:

答案 0 :(得分:0)

正如@rbarbera所述,类型擦除是这种情况下的方法:

https://realm.io/news/type-erased-wrappers-in-swift/