Swift泛型(类型替换?)

3

这只是一个孤立的例子,可能看起来不太有用,但我还是想知道为什么它不能工作?非常感谢任何见解。

protocol Prot: class {
    init()
}

class A: Prot {
    required init(){ }
}

struct Client<T: Prot> {
    let tau: T.Type
}

if let aTau = A.self as? Prot.Type {
    print(aTau === A.self)  // ✅
    Client(tau: A.self)     // ✅
    Client(tau: aTau)       // ❌
}

错误信息为:
Cannot invoke initializer for type 'Client<_>' with an argument list of type '(tau: Prot.Type)'

2
这是协议不符合自身?的一个变体 - 你不能将Prot用作符合Prot的类型。 - Hamish
1个回答

2
通用的Client类需要一个具体的类型进行特化 - 即一个类/结构体/枚举,而Prot.Type不符合此要求。这就是为什么会出现错误的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接