Sto provando a portare l'esempio Matrix dal libro Swift per essere generico.Non c'è un valore predefinito (T) in Swift?
Ecco quello che ho ottenuto finora:
struct Matrix<T> {
let rows: Int, columns: Int
var grid: T[]
init(rows: Int, columns: Int, repeatedValue: T) {
self.rows = rows
self.columns = columns
grid = Array(count: rows * columns, repeatedValue: repeatedValue)
}
func indexIsValidForRow(row: Int, column: Int) -> Bool {
return row >= 0 && row < rows && column >= 0 && column < columns
}
subscript(row: Int, column: Int) -> T {
get {
assert(indexIsValidForRow(row, column: column), "Index out of range")
return grid[(row * columns) + column]
}
set {
assert(indexIsValidForRow(row, column: column), "Index out of range")
grid[(row * columns) + column] = newValue
}
}
}
Nota che ho dovuto passare repeatedValue: T
al costruttore.
In C#, avrei semplicemente usato default(T)
che sarebbe 0
per i numeri, per false
booleani e null
per i tipi di riferimento. Comprendo che Swift non consente nil
per i tipi non opzionali, ma sono comunque curioso di sapere se il passaggio di un parametro esplicito è l'unico modo, o se ci sono circa equivalenti a default(T)
.