我很难理解为什么我在Swift中遇到特定错误。
具体来说,如果我有一个协议' X'它定义了一个必须采用其他协议的属性' A' 如果我采用' X'在另一个类' Y',但尝试将所需属性声明为实现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类?
答案 0 :(得分:3)
这是因为协议X
声明someA
属于A
类型,所以在课程Y
中,如果您someA
键入B
,然后您就无法为其分配A
类型的任何内容,协议会说明您需要这样做。
如果协议说您需要一个变量来保存任何Car
,并且您有一个Porsche
,那么您只想告诉您的协议符合类该变量只能保存Porsche
1}},然后出现并试图将Mazda
放入Porsche
变量的人会遇到问题,因为协议说他们应该能够这样做。