Swift泛型-关联类型问题

2019-12-25  本文已影响0人  zolobdz

今天写代码遇到一个泛型问题。我简单描述下场景:
对象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 []
    }
}
上一篇下一篇

猜你喜欢

热点阅读