【发布时间】:2016-02-26 16:17:49
【问题描述】:
我很难理解为什么我会在 Swift 中遇到特定错误。
具体来说,如果我有一个协议“X”,它定义了一个必须采用另一个协议“A”的属性。 如果我在另一个类“Y”中采用“X”,但尝试将所需属性声明为实现 A 的类型,则会收到以下错误:
类型“Y”不符合协议“X”
这是一个例子:
protocol A {
}
class B : A {
var foo = "foo"
}
protocol X {
var someA : A {get set}
}
class Y : X { //Error: Type Y does not conform to protocol X
var someA = B()
}
如果我将 someA 声明为 A 如下:
var someA : A = B()
没有错误,但是我必须将 someA 转换为 B 才能访问 foo。
我的问题是为什么我不能首先将 someA 声明为 B 类型?
【问题讨论】:
标签: swift protocols covariance contravariance