美文网首页
Swift泛型-关联类型问题

Swift泛型-关联类型问题

作者: zolobdz | 来源:发表于2019-12-25 14:06 被阅读0次

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

          本文链接:https://www.haomeiwen.com/subject/fgrcoctx.html