В Swift, как вы можете вызвать функцию подкласса в методе базового класса init
? По существу, целью является обеспечение того, чтобы каждый подкласс вызывал свою собственную версию initGrid
, а затем весь код для установки numRows
и numCols
определен только один раз в базовом классе.Swift: вызов функции подкласса в версии базового класса init
Однако при инициализации подкласса вместо этого выполняется функция initGrid
из базового класса, а не подкласса. Это приводит к исключению индекса массива, так как grid
пуст, если подкласс не создает его.
class BaseGrid {
var grid = [[NodeType]]()
var numRows = 0
var numCols = 0
init() {
// Init grid
initGrid()
// Set <numRows>
numRows = grid.count
// Set <numCols>
numCols = grid[0].count
// Verify each row contains same number of columns
for row in 0..<numRows {
assert(grid[row].count == numCols)
}
}
// Subclasses override this function
func initGrid() {}
}
class ChildGrid: BaseGrid {
override init() {
super.init()
}
override func initGrid() {
grid = [
[NodeType.Blue, NodeType.Blue, NodeType.Blue],
[NodeType.Red, NodeType.Red, NodeType.Red],
[NodeType.Empty, NodeType.Blue, NodeType.Empty]
]
}
}
Это печатает «Подкласс» для меня: https://gist.github.com/jawwad/1ee4347debd082a3c768 – Jawwad
Спасибо @Jawwad, но это не работает для нас. Теперь вопрос содержит код для подкласса. – Crashalot