【发布时间】:2018-09-27 14:56:25
【问题描述】:
给定以下类型
protocol AProtocol {}
protocol AnotherProtocol {}
class AClass: AProtocol, AnotherProtocol {}
我有点困惑为什么会抛出以下错误:“错误:无法将'AClass'类型的值转换为指定的'T'类型”
class generic<T> where T:AProtocol, T:AnotherProtocol {
let prop: T = AClass()
}
但以下工作正常:
class generic<T> where T: AProtocol, T: AnotherProtocol {
let prop: T
init(withProp prop: T) { self.prop = prop }
}
let instance = generic<AClass>(withProp: AClass())
【问题讨论】:
-
因为如果你有一些
BClass也实现了AProtocol & AnotherProtocol,那么T可能是BClass,而不是AClass。除非您在约束中指定特定类,否则您不能为 T 假定特定类 -
换句话说,不可能从泛型类的实现内部引用泛型类型的实现?
标签: swift generics types swift4