I am extending a base class (one that I do not control) in Swift. I want to provide a class function to create an instance injected into a subclass. Common function required. However, an implementation like the one below does not return the expected type of subclass.
class Calculator {
func showKind() { println("regular") }
}
class ScientificCalculator: Calculator {
let model: String = "HP-15C"
override func showKind() { println("scientific") }
}
extension Calculator {
class func create<T:Calculator>() -> T {
let instance = T()
return instance
}
}
let sci: ScientificCalculator = ScientificCalculator.create()
sci.showKind()
The debugger reports Thow ScientificCalculator, but sci- Calculator, and the call sci.showKind()returns "normal".
Is there a way to achieve the desired result using generics, or is it a mistake?
source
share