2016-12-13 44 views
0

我有一個類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

回答

3

在Swift中,如果向類中添加新的初始化程序,則類不會繼承其基類的初始化程序。

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

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

謝謝,這個工程。然而,我想知道爲什麼Swift要求我添加'override'關鍵字,即使初始化器實際上並沒有被繼承。 – Matt

+0

我確實忘記了'override'。我修正了這一點。你需要'覆蓋',因爲你重寫了方法,即使它沒有被顯式地顯示給子類。這些都在「Swift編程語言」一書的「初始化」一章中介紹過。 – rmaddy

+0

我剛剛閱讀,謝謝你的信息! – Matt