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 []
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 泛型(Generics) 泛型代码允许你定义适用于任何类型的,符合你设置的要求的,灵活且可重用的 函数和类型。泛型...
    果啤阅读 3,980评论 0 0
  • 泛型代码可以确保你写出灵活的,可重用的函数和定义出任何你所确定好的需求的类型。你的可以写出避免重复的代码,并且用一...
    iOS_Developer阅读 4,212评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,887评论 1 32
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,472评论 1 10
  • 我的写作小结 我喜欢记录一些事情,源于自己比较丰富和敏感的心,而又不愿意让太多熟人看到我的心思,或我的文字。也可说...
    若素向阳阅读 1,607评论 0 2

友情链接更多精彩内容