我有这个协议:
protocol ViewType {
associatedtype T: ViewData.View
var data:T! {get set}
}
ViewData.View
是一个类。
我有一个名为 TemplateLabel
的类,它继承自 UILabel
并符合 ViewType
。
class TemplateLabel:UILabel, ViewType {
var data: ViewData.View.Label!
}
我从Storyboard中获取了一个TemplateLabel
作为UIView
,并尝试将UIView
转换为ViewType
以将data
属性分配给它。
let view = SB.instantiateViewControllerWithIdentifier("view_label").view
if var v = view as? ViewType { // Error
v.data = data // Error
}
但是我遇到了错误:
协议“ViewType”只能用作通用约束,因为它具有自我或关联类型要求
成员“data”不能用于“ViewType”协议类型的值;而应该使用通用约束
TemplateLabel
。并且要在 Swift 中了解更多关于协议的内容 :) - werediver