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 []
    }
}

你可能感兴趣的:(Swift泛型-关联类型问题)