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