我有这段代码:
class Dark: NSObject {
class var className: String {
return NSStringFromClass(self)!.componentsSeparatedByString(".").last!
}
var success = 0
class func devour<T: Dark>(params: Int) -> T {
var s = T()
return assign(s, params: params)
}
class func assign<T: Dark>(item: T, params: Int) -> T{
if item.dynamicType === self {
item.success = params
}
return item
}
}
class Black: Dark {
}
class Violet: Dark {
}
Black.className // returns "Black"
Violet.className // returns "Violet"
问题出现在我执行以下操作时:
var ret = Black.devour(5)
ret.success //returns 0 which I expect to be 5
ret.self // returns {Dark success 0} which I expect to be {Black success 0}
这里的问题在于,当子类使用继承的方法devour时,它返回一个类型为Dark
的对象。我希望在调用devour时能够返回子类的类型而不是超类的类型。例如,当我执行以下操作时:
var ret = Black.devour(5)
ret的类应该是Black
而不是Dark
。
我希望有人能帮助我解决这个问题。我已经没有什么好的主意了。谢谢! 我想避免链接,我认为这是最后的选择。