具有泛型回调的便捷构造函数将在Swift 3.1

时间:2017-05-19 03:41:59

标签: swift generics swift3 crash

当创建扩展通用基类的子类对象时,如果它是使用便捷构造函数创建的,则回调包含通用对象将在运行时崩溃,因为传回的对象不正确/已损坏。 它是Swift3.1中的新功能。 Swift 3.0中没有这样的问题。 它只在使用便利构造函数创建对象时发生。

protocol Initializable {
    init()
}

class MyClass: Initializable {
    required init() {}
    func log() {
        print("Hello")
    }
}

class Parent<T: Initializable> {
    typealias Callback = (T) -> Void

    init(callback: Callback) {
        callback(T())
    }
}

class Child: Parent<MyClass> {
    convenience init(value: Int, callback: Callback) {
        self.init(callback: callback)
    }
    override init(callback: Callback) {
        super.init(callback: callback)
    }
}

let _ = Child { data in
    data.log() //This is OK
}

let _ = Child(value: 0) { data in
    data.log() //This will crash under swift3.1
}

这是语言错误吗?或者我在做一些不应该做的事情?

0 个答案:

没有答案