繁体   English   中英

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

[英]Cannot assign Generic value to protocol associatedType variable in an extension

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

我试图在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'的值来键入'_?' ”。 我假设这可能是因为它无法在编译时解析参数类型,但我不知道如何解决这个问题...

正如@rbarbera所述 ,Type Erasure是这种情况下的方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM