2015-06-26 58 views
0

我有一個Store類,它被編碼爲泛型,因此它可以管理從公共基類派生的所有類。Swift泛型,創建派生對象

商店有一個new()方法,該方法創建並返回它當前管理的類。理論上講,它應該返回派生類。

不幸的是,商店總是返回基類。下面是代碼片段來解釋它:

import UIKit 

class Base: NSObject { 

    var ID:Int=0 
} 

class Adress:Base 
{ 
    var name = "" 
} 

class Store<T:Base> { 

    var nextID:Int = 0 

    func getNextID()->Int { 
     return ++nextID; 
    } 


    func new() ->T{ 

     let n = T() 
     n.ID = getNextID() 
     return n 
    } 
} 




let store = Store<Adress>() 
var adr:Adress = store.new() // should be Adress, but is Base 
adr.name = "Tom"    // crash here, because adr is not an Adress 

如果我調試商店裏面的new()方法,它創建了一個ADRESS對象。但在調用代碼中,它突然變成了一個Base對象。

任何想法這裏怎麼了?

回答

1

我不完全理解你的意圖與上述代碼。但是,如果你通過

class Store<T: Adress> { 

替代

class Store<T: Base> { 

那麼變量ADR的類型ADRESS的。以下聲明工作,然後

println(adr.name) // displays "Tom" 
println(adr.ID) // displays "1" 
+0

伊萬,你說得對。但我的意圖是保持商店的代碼通用。 new()函數允許我初始化從Base派生的任何類,並帶有一些存儲內部事物。但是我也可以在店裏插入新對象的時候這樣做。不管怎麼說,還是要謝謝你! –