Swift Generics(类型替换?)

时间:2016-12-09 10:33:47

标签: swift generics swift3

这是一个孤立的例子,所以可能看起来不那么有用,但无论如何我想知道为什么它不起作用?任何见解都非常赞赏。

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)'

1 个答案:

答案 0 :(得分:2)

泛型Client类需要具体的专门化类型 - 即类/结构/枚举,Prot.Type不符合此要求。这就是你得到错误的原因。