考虑以下代码:
class A {}
class B: A {}
protocol P {
var a: A {get}
}
class P1: P {
let a: A = B() // No problem
}
class P2: P {
let a: B = B() // Can't compile!!
}
既然B
是A
的子类,为什么我们不能将B
作为var a<的返回类型
?
最佳答案
您不能这样做,因为 P
协议(protocol)明确要求符合规范的类具有 A
类型的属性。
您始终可以在协议(protocol)中使用关联类型
和泛型:
class A {}
class B: A {}
protocol P {
associatedtype T: A
var a: T { get }
}
class P1: P {
let a: A = B()
}
class P2: P {
let a: B = B()
}
但请记住,如果您这样做,则不能直接使用 P
协议(protocol)作为类型,而只能与泛型一起使用:
关于Swift继承函数返回类型不能是子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64782592/