2016-05-08 9 views
9

前に使用自己我々は、以下の便利なメソッドに次のエラーを取得している:self.init呼び出し方法スウィフト:コンビニエンス初期化子 - self.initコール

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でこのタイプの動作を実装できますか?

+3

ちょうど 'return nil' –

答えて

20

Leoが既に指摘したように、コンパイラを訴える最も簡単な方法は、ガードステートメントの中にnilを返すことです。

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

具体的な理由がない限り、最初にfailableイニシャライザを使用しないようにすることもできます。 init(id : Int, desc : String)はうまくコンパイルされます。

関連する問題