如果泛型类需要子类,则找不到协议init

时间:2017-05-19 09:07:38

标签: ios swift generics swift-protocols

我用泛型逻辑创建了一个小例子,我不明白这个错误意味着什么。我认为指定初始化程序存在一些问题。

希望有人已经处理过,可以向我解释。

protocol Test {
    init(value: Int)
}

class ClassTest<T: Test> where T: UIView {
    var t: T

    init() {
        t = T(value: 2) //error:
    }
}

给出以下编译器错误

  

参数标签'(值:)'与任何可用的重载都不匹配

2 个答案:

答案 0 :(得分:3)

此错误已在Swift Jira中打开:( - https://bugs.swift.org/browse/SR-3837

答案 1 :(得分:2)

现在试试这个 hack

class ClassTest<T: Test> where T: UIView {
    var t: T
    init() {
        // t = T(value: 2) // Compiler error!
        t = create()
    }
}

func create<T: Test>() -> T {
    return T(value: 2)  
}

我想要担心一个 less 约束让编译器继续: - )

编译器仍然损坏?检查this code compiles successfully是否已经修复此错误。