我有一个根协议A
和另一个扩展了B
的协议A
。然后,我有了一个协议C
,该协议要求类型为A
的变量。现在,当我实现一个类X
并声明一个类型为A
的变量时,它符合C
;但是如果我将变量类型更改为B
(扩展了A
),则是编译错误。为什么?
protocol A { }
protocol B: A { }
protocol C: class {
var a: A? { get set }
}
class X: C {
var a: B?
}
我收到此编译错误:
error: type 'X' does not conform to protocol 'C'
class X: C {
^
note: candidate has non-matching type 'B?'
var a: B?
^
note: protocol requires property 'a' with type 'A?'; do you want to add a stub?
var a: A? { get set }
^
[编辑]
好吧,因为属性类型为{ get set }
,所以我无法在类a
中分配变量X
来符合A
而不是B
的东西并且该协议要求这是可能的,因此编译错误是有效的……但是即使我仅将属性类型更改为{ get }
,它仍然是相同的。