2
我有這樣的協議:協議只能被用作通用約束,因爲它有自或相關聯的類型要求
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!
}
我從買這個TemplateLabel
toryboard爲UIView
並嘗試UIView
投進去ViewType
來分配data
屬性,它
let view = SB.instantiateViewControllerWithIdentifier("view_label").view
if var v = view as? ViewType { // Error
v.data = data // Error
}
但我得到的錯誤:
協議「ViewType」只能作爲一種通用的約束,因爲它具有自我或相關類型要求
成員數據不能用於協議類型'ViewType'的值;使用一個通用的約束,而不是
您應該投射到特定的實現,而不是約束協議。投射到'TemplateLabel'。並閱讀更多關於在Swift中的協議:) – werediver
@werediver我有一個特定的原因不直接投到TemplateLabel,它是使事情變得動態,這只是一個簡單的例子 – Arbitur
然後,你需要一個通用的方法...我可以顯示一個例子(在幾分鐘內)。另一種方法是進入刪除類型,但我認爲這太深了。 – werediver