Swift 2.0 には 2 つのクラスの階層があります。どちらのクラスも、引数を渡すか、引数[String: AnyObject]
を含む JSON 辞書 ( ) を渡すことでインスタンス化できます。
引数を直接受け取る initはでdesignated inits
、JSON を受け取る init は同じ署名です。convenience inits
class Thing {
let name : String
init(name: String){
self.name = name
}
convenience init(jsonNamed: String){
// read the json, parse and extract
// the name
self.init(name: "got this from JSON")
}
}
class SubThing : Thing{
var surname : String
init(name: String, surname: String){
self.surname = surname
super.init(name: name)
}
convenience init(jsonNamed: String){
self.init(jsonNamed: "got this from JSON")
// extract surname
self.surname = "Got this from json"
}
}
convenience
initSubThing
は super で同じ init を呼び出すことは許可されていません。自分自身で呼び出すと、両方のメソッドのように無限再帰が発生しますhave the same signature
。
両方の json inits を作成するとdesignated
、 を呼び出すことができず、 の両方の初期化子で同じコードを繰り返さなければなりません。self.init(name:)
Thing
Thing
このような状況を回避する最善の方法は何ですか?