在子类的其他初始化将覆盖超类

在子类的其他初始化将覆盖超类

问题描述:

我有一个类XYZObjectABCObject继承了一些初始化和方法的初始化:在子类的其他初始化将覆盖超类

class XYZObject: ABCObject { 
    var name: String = "" 

    init(withName name: String){ 
     self.name = name 
    } 
} 

class ABCObject{ 
    internal var jsonstore: JSON 

    init(withJson newJson: JSON){ 
     jsonstore = newJson 
    } 
} 

但是,每当我现在请XYZObject(withJson: jsonstuff)斯威夫特给我的错误:Incorrect argument label in call (have 'withJson:', expected 'withName:')

我对swift和iOS开发相当新颖。我在这里错过了什么?

感谢您的帮助!

+1

什么是'jsonstuff'? – NobodyNada

+0

“JSON”类型的变量 – Matt

在Swift中,如果向类中添加新的初始化程序,则类不会继承其基类的初始化程序。

如果你想使init(withJson:)在您所在XYZObject类,你需要添加它:

override init(withJson newJson: JSON) { 
    super.init(withJson:newJson) 
} 
+1

谢谢,这个工程。然而,我想知道为什么Swift要求我添加'override'关键字,即使初始化器实际上并没有被继承。 – Matt

+0

我确实忘记了'override'。我修正了这一点。你需要'覆盖',因为你重写了方法,即使它没有被显式地显示给子类。这些都在“Swift编程语言”一书的“初始化”一章中介绍过。 – rmaddy

+0

我刚刚阅读,谢谢你的信息! – Matt