От this answer, я знаю, что я могу создать экземпляр подкласса из суперкласса. Тем не менее, я не могу понять, как создать массив подкласса из суперкласса.Как создать массив экземпляров подкласса из суперкласса
Опираясь на приведенном выше примере, вот мой лучший снимок до сих пор:
class Calculator {
func showKind() { println("regular") }
required init() {}
}
class ScientificCalculator: Calculator {
let model: String = "HP-15C"
override func showKind() { println("\(model) - Scientific") }
required init() {
super.init()
}
}
extension Calculator {
class func createMultiple<T:Calculator>(num: Int) -> T {
let subclass: T.Type = T.self
var calculators = [subclass]()
for i in 0..<num {
calculators.append(subclass())
}
return calculators
}
}
let scis: [ScientificCalculator] = ScientificCalculator.createMultiple(2)
for sci in scis {
sci.showKind()
}
С этим кодом, линия var calculators = [subclass]()
показывает ошибку Invalid use of '()' to call a value of non-function type '[T.Type]'
.
Как я могу вернуть массив ScientificCalculators от Calculator.createMultiple
?
Я думаю, что код не создает ScienceCalculator, а обычные объекты Calculator. – Christian
@ChristianWoerz no, он создает все, что есть T –
Если я попробую ваш код на Playground, он создаст обычный калькулятор, если я вызову функцию из класса ScienceCalculator, как это сделал OP. – Christian