我在 Swift 2.0 中有 2 个类的层次结构。这两个类都可以通过传递参数或传递[String: AnyObject]
包含参数的 JSON 字典 ( ) 来实例化。
直接采用参数的 inits 是designated inits
,而采用 JSON 的 initsconvenience 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
init inSubThing
不允许在 super 中调用同一个 init,如果我在 self 中调用,会导致无限递归,因为这两个方法have the same signature
。
如果我让两个 json 初始化designated
,我不能调用self.init(name:)
in Thing
,我将不得不在两个初始化器中重复相同的代码Thing
。
解决这种情况的最佳方法是什么?