【问题标题】:Cannot assign Generic value to protocol associatedType variable in an extension无法将通用值分配给扩展中的协议关联类型变量
【发布时间】:2016-06-13 15:33:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios iphone swift generics protocols


    【解决方案1】:

    正如@rbarbera 所说,类型擦除是在这种情况下要走的路:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      相关资源
      最近更新 更多