今天寫代碼遇到一個泛型問題捌显。我簡單描述下場景:
對象A和B公用一種類型的屬性(或者方法)俱箱,這時候根據面向協議的原則柱宦,將屬性抽取成協議些椒,然后再約束泛型。代碼如下
struct PageAModel: Rule {
// 對象特異性
}
protocol Rule {
// 共有屬性
}
protocol RuleProtocol {
var items: [Rule] {get}
}
struct PageAViewModel: RuleProtocol {
var items: [TempModel] {
return []
}
}
可是這樣是會有報錯的捷沸,提示對象PageAViewModel
沒有遵循RuleProtocol
協議摊沉,但是我們命名聲明了屬性items
.
經過一番查詢和思考狐史,需要在RuleProtocol
中關聯協議才可正常運行
struct TempModel: Rule {
}
protocol Rule {
}
protocol RuleProtocol {
associatedtype A: Rule
var items: [A] {get}
}
struct FreeGiftPage: RuleProtocol {
var items: [TempModel] {
return []
}
}