Ios 如果泛型类需要子类,则找不到协议初始化

Ios 如果泛型类需要子类,则找不到协议初始化,ios,swift,generics,swift-protocols,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: } } 协议测试{ init(值:Int) } 类Cl

我创建了一个带有泛型逻辑的小示例,我不明白这个错误意味着什么。我认为指定的初始值设定项存在一些问题

希望有人已经处理过了,可以解释给我听

protocol Test {
    init(value: Int)
}

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

    init() {
        t = T(value: 2) //error:
    }
}
协议测试{
init(值:Int)
}
类ClassTest,其中T:UIView{
变量t:t
init(){
t=t(值:2)//错误:
}
}
给出以下编译器错误:

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


这个bug已经在Swift Jira中打开了:(

现在试试这个黑客:

class类测试,其中T:UIView{
变量t:t
init(){
//t=t(值:2)//编译器错误!
t=create()
}
}
func create()->T{
返回T(值:2)
}
我猜少了一个约束就可以让编译器运行了:-)



编译器仍然损坏?检查是否已修复此错误。

我测试过,它运行正常;)为什么要在T:UIView中添加
?如果它是UIView类,则需要实现init(coder:),这就是为什么要error@PauloMattos尝试在Xcode:)@PauloMattos中检查它,该类需要从另一个类继承才能复制:这是一个已经归档的bug,请参阅
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)  
}