Swift泛型-關聯類型問題

今天寫代碼遇到一個泛型問題。我簡單描述下場景:
對象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 []
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章