类型不符合协议 - 类型别名到另一个协议

Type does not conform to protocol - typealias to another protocol

我遇到了一个烦人的问题,我希望你们能帮我解决这个问题。

我有两个协议和一个 class:

protocol Prot1: AnyObject {

}

protocol Prot2 {
    associatedtype T: AnyObject
}

class TheClass: Prot2 {
    typealias T = Prot1
}

这导致编译器说:

在导航中显示更多详细信息:

我确实需要关联类型为 AnyObject 类型。这就是我需要帮助的原因。

有人知道怎么解决吗?

非常感谢。

OBS:我正在使用 swift 2.3

将 Anyobject 更改为 Any 即可,或者删除 Anyobject。 Anyobject 是 class 类型。Type Casting for Any and AnyObject

此代码段编译通过。但我不确定这是否是您要找的...

protocol Prot1: AnyObject 
{

}

protocol Prot2 
{
    associatedtype T: AnyObject
}

class TheClass: Prot2 
{
    typealias U = Prot1
    typealias T = AnyObject
}

为了展示您在这里可以做什么的本质,我将稍微简化示例。这是合法的:

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 的 type,我们没问题:

protocol P {}

protocol Prot {
    associatedtype T: P
}

struct S : P {

}

class TheClass: Prot {
    typealias T = S // fine
}