![](/img/trans.png)
[英]Type 'X' does not conform to protocol 'Y' when using associatedtype / typealias
[英]Type does not conform to protocol - typealias to another protocol
我面临着一个棘手的问题,我希望你们可以帮助我解决这个问题。
我有两个协议和一个类:
protocol Prot1: AnyObject {
}
protocol Prot2 {
associatedtype T: AnyObject
}
class TheClass: Prot2 {
typealias T = Prot1
}
这使编译器说:
在导航中,它显示更多详细信息:
我确实需要关联类型为AnyObject类型。 这就是为什么我需要帮助。
有谁知道如何解决这个问题?
非常感谢你。
OBS:我正在使用Swift 2.3
为了展示您可以在此处执行的操作的性质,我将稍微简化一下示例。 这是合法的:
protocol Prot {
associatedtype T: AnyObject
}
class TheClass: Prot {
typealias T = AnyObject // fine
}
这也是合法的:
protocol Prot {
associatedtype T: AnyObject
}
class TheClass: Prot {
typealias T = NSObject // fine
}
这是因为NSObject是AnyObject的采用者 。
但这(您要尝试执行的操作) 不合法:
protocol Prot {
associatedtype T: AnyObject
}
protocol SecondProt : AnyObject {
}
class TheClass: Prot {
typealias T = SecondProt // error
}
原因是SecondProt是采用AnyObject的另一种协议 。 那不是typealias T
插槽中可以使用的东西。
这与AnyObject的特殊性质无关。 我们可以在没有任何地方提及AnyObject的情况下得到相同的错误:
protocol P {}
protocol Prot {
associatedtype T: P
}
protocol SecondProt : P {
}
class TheClass: Prot {
typealias T = SecondProt // error
}
同样,如果我们提供采用P的类型 ,则可以:
protocol P {}
protocol Prot {
associatedtype T: P
}
struct S : P {
}
class TheClass: Prot {
typealias T = S // fine
}
可以将Anyobject更改为Any,或删除Anyobject。 Anyobject是类类型。 类型转换为Any和AnyObject
该代码段编译。 但是我不确定这是否是您想要的...
protocol Prot1: AnyObject
{
}
protocol Prot2
{
associatedtype T: AnyObject
}
class TheClass: Prot2
{
typealias U = Prot1
typealias T = AnyObject
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.