2016-11-22 71 views
2
class MissionControl { 

    var nameField="" 
    var surnameField="" 
    var phoneField="" 
    var tcIdField="" 
    var photoField="" 


    class var sharedInstance: MissionControl { 
     struct Singleton { static let instance = MissionControl() } 
     return Singleton.instance 
    } 



    override init() { 
     super.init() 
    } 

} 

我在Swift 2.3中使用了這個類,它工作的很好。但我不能用斯威夫特3.我得到以下編譯器錯誤使用方法:初始化方法在swift 3中

初始化程序不從 超

「超級」的成員不能在根類

引用重寫指定初始化

我該如何解決它們?

+2

這是製作「單身」的陳舊方式。請按照喜歡這裏的首選方式:http://stackoverflow.com/a/36012158/2227743 – Moritz

+2

關於你的問題:你的班級沒有從任何東西繼承,那麼爲什麼你會叫超級?這不是必需的。 – Moritz

+0

你想讓它成爲單身課程嗎?如果是的話,「init」應該是私人的,也有更好的方法來做到這一點。 –

回答

5

您可以通過不致電super.init()來解決此問題。您的類沒有聲明爲從另一個基類繼承,因此沒有super.init()可以調用。

順便說一句,你的共享實例我只想做

static let sharedInstance = MissionControl() 
+0

好的,我將我的代碼更改爲:http://prntscr.com/dac7sw並從http://prntscr.com/dac851從另一個視圖控制器訪問但我在日誌部分看不到我的打印。哪裏有問題? –

+0

@TolgayToklar不知道是什麼問題,但我認爲它發生在懶惰,直到需要共享實例,並且如果你不使用共享實例,可能是'let'語句正在被優化。不僅要做一個分配,還要在sharedInstance上調用一個方法。 – JeremyP