![](/img/trans.png)
[英]cast variable of protocol type over to another type that conforms to that protocol
[英]Define a protocol type variable in another protocol
我想在其他协议p3和 class c1中定义类型为协议p1的变量v1 ,它符合协议p3我想从另一个协议p2定义v1 ,它是p1的子协议。
以正常方式我得到了这个错误
类型“c1”不符合协议“p3”
你有什么解决办法吗?
protocol p1 {}
protocol p2: p1 {}
protocol p3 {
var del: p1! { get set }
}
class c1: p3 {
var del: p2!
}
你不能这样做。
您定义协议p2
以符合协议p1
。
您定义协议p3
的成员del
以确认协议p1
。
您将 class c1
定义为符合协议p3
,并将其成员del
定义为符合p2
。
这是问题所在:如果 class c1
符合协议p3
,那么您应该能够将任何符合协议p1
的内容分配给它的del
成员。 这就是符合协议p1
的意思,正如您自己定义的那样。
但是您已经定义了 class c1
的del
成员以符合协议p2
。 这就是问题。
这确实以一种方式起作用 - 任何符合协议p2
的东西都已知也符合协议p1
,因此您可以将任何符合协议p2
的东西分配给 class c1
的成员del
的实例,这样就可以了。
但是,它不起作用。 符合协议p1
的事物未定义为符合协议p2
。 所以我们有差距。 因为 class c1
符合协议p3
,所以您应该能够将不符合协议p2
但符合协议p1
的东西分配给它的成员del
。 这就是您定义协议的方式。 但是您还定义了c1
的del
以符合协议p2
。
你告诉类型系统两件不同的事情。 您是说del
通过协议间接需要p1
的东西,而您是说del
通过 class 定义直接需要p2
的东西。 两者都不正确,因此编译器无法继续。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.