我有一个使用关联类型的协议,例如:
protocol Populatable {
typealias T
func populateWith(object: T)
}
和实现协议的类:
class DateRowType: Populatable {
func populateWith(object: NSDate) {
print(object.description)
}
}
class StringRowType : Populatable {
func populateWith(object: String) {
print(object)
}
}
但是当我尝试强制转换或测试一致性时,如下所示:
let drt = DateRowType()
let srt = StringRowType()
let rowTypes = [drt, srt]
let data = [NSDate(), "foo"]
for (i, p: Populatable) in enumerate(rowTypes) {
p.populateWith(data[i])
}
我得到错误:
Protocol 'Populatable' 只能用作通用约束,因为它具有 Self 或关联的类型要求
测试对象是否符合可填充协议的正确方法是什么?
注意:尝试此操作所需的所有代码都包含在问题中,只需将代码块复制到操场上即可。