Swift Generics,创建派生对象

时间:2015-06-26 13:34:33

标签: swift class generics derived

我有一个Store类,它被编码为泛型,因此它可以管理从公共基类派生的所有类。

商店有一个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 

如果我在Store中调试new()方法,它会创建一个Adress对象。但是在调用代码中,它突然变成了一个Base对象。

有什么想法在这里出错吗?

1 个答案:

答案 0 :(得分:1)

我并不完全理解您对上述代码的意图。但如果你替换

class Store<T: Base> {

通过

class Store<T: Adress> {

然后变量adr的类型为Adress。以下陈述工作

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