今天寫代碼遇到一個泛型問題。我簡單描述下場景:
對象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 []
}
}