繁体   English   中英

在另一个协议中定义一个协议类型变量

[英]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 c1del成员以符合协议p2 这就是问题。

这确实以一种方式起作用 - 任何符合协议p2的东西都已知也符合协议p1 ,因此您可以将任何符合协议p2的东西分配给 class c1的成员del的实例,这样就可以了。

但是,它不起作用。 符合协议p1的事物未定义为符合协议p2 所以我们有差距。 因为 class c1符合协议p3 ,所以您应该能够将不符合协议p2但符合协议p1的东西分配给它的成员del 这就是您定义协议的方式。 但是您定义了c1del以符合协议p2

你告诉类型系统两件不同的事情。 您是说del通过协议间接需要p1的东西,而您是说del通过 class 定义直接需要p2的东西。 两者都不正确,因此编译器无法继续。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM