【问题标题】:Protocol init not found if generic class requires subclass如果泛型类需要子类,则找不到协议初始化
【发布时间】:2017-05-19 09:07:38
【问题描述】:

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

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

protocol Test {
    init(value: Int)
}

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

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

给出以下编译错误

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

【问题讨论】:

标签: ios swift generics swift-protocols


【解决方案1】:

这个 bug 已经在 Swift Jira 中打开了 :( - https://bugs.swift.org/browse/SR-3837

【讨论】:

    【解决方案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 是否已修复此错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多