2015-06-26 60 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派生的任何类,并带有一些存储内部事物。但是我也可以在店里插入新对象的时候这样做。不管怎么说,还是要谢谢你! –