ho questo codice:metodi della superclasse di tornare tipo sottoclasse in rapida
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"
Il problema si verifica quando faccio questo:
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}
Il problema qui è che quando la sottoclasse utilizza il metodo ereditato divorare, restituisce un oggetto di tipo Dark
. Voglio essere in grado di restituire il tipo di sottoclasse e non il tipo di superclasse quando si chiama divorare. Esempio quando lo faccio:
var ret = Black.devour(5)
La classe di ret dovrebbe essere di classe Black
e non di classe Dark
.
Spero che qualcuno possa aiutarmi in questo. Sono davvero fuori dalle idee. Grazie! Voglio evitare il concatenamento e lo considero l'ultima spiaggia.
Qual è esattamente il tuo problema? Registro errori per favore –
Vedere http://stackoverflow.com/questions/26296938/returning-a-subclass-from-its-base-class-in-swift –
hi @RobinEllerkmann: Il problema qui è che quando la sottoclasse utilizza il metodo ereditato divorare, restituisce un oggetto di tipo Dark. Voglio essere in grado di restituire il tipo di sottoclasse e non il tipo di superclasse quando si chiama divorare – oregon