2015-02-23 97 views
0

我想保留幾個類的數組,並按需求實例化它們。下面是一些演示代碼:如何在Swift中創建一個類(存儲在數組中)?

class AClass { 
    func areYouThere() -> String { 
     return "Yes, I am!" 
    } 
} 

class FirstClass: AClass { 
    override func areYouThere() -> String { 
     return "Yes, I am #1!" 
    } 
} 

class SecondClass: AClass { 
    override func areYouThere() -> String { 
     return "Yes, I am #2!" 
    } 
} 

let className = FirstClass.self 
let classReferences: [AClass.Type] = [FirstClass.self, SecondClass.self] 

let instanceOfClass = classReferences[0].init() 
let test = instanceOfClass.areYouThere() 

代碼沒有編譯,但是當我運行它,「測試」將繼續「是的,我在這裏!」 (沒有#1),因爲instanceOfClass是「AClass」的一個實例,而不是「FirstClass」。我猜,我的Array的類型[AClass.Type]是錯誤的。我也嘗試過「AnyClass」,但比編譯器抱怨,「init」沒有在「AnyClass」中定義。有任何想法嗎?

謝謝! Ingo。

回答

2

您需要在您的基類中使用required init()初始值設定項。

class AClass { 
    required init() {} // <- HERE 

    func areYouThere() -> String { 
     return "Yes, I am!" 
    } 
} 

因爲子類may not inherit init() initializer

IMO,這是一個編譯器錯誤。編譯器應該報告classReferences[0]可能沒有init()

順便說一句,你可以:

let instanceOfClass = classReferences[0]() 

無需編寫.init

+0

就是這樣!謝謝! – 2015-02-23 12:46:46

相關問題