Swift:方便初始化程序 - 在self.init调用之前自我使用

时间:2016-05-08 01:56:03

标签: ios swift initialization

我们在下面的便捷方法上遇到以下错误:

  

self.init call之前使用的自我

class MyClass {
    var id : Int        
    var desc : String

    init?(id : Int, desc : String) {
        self.id = id
        self.desc = desc
    }

    convenience init?(id : Int?) {
        guard let x = id else {
            return
        }
        self.init(id : x, desc : "Blah")
    }
}

我们如何在Swift中实现这种行为?

1 个答案:

答案 0 :(得分:29)

正如Leo已经指出的那样,安抚编译器的最快方法是在guard语句中返回nil。

convenience init?(id : Int?) {
    guard let x = id else {
        return nil
    }
    self.init(id: x, desc: "Blah")
}

除非有特殊原因,否则您也可以避免首先使用可用的初始化程序。init(id : Int, desc : String)编译得很好。