Subíndice Swift con tipo de dato genérico.
Estoy intentando programar una estructura de almacenamiento de datos bidimensional para varios tipos de datos. Sin embargo, estoy teniendo problemas con el subíndice para establecer los datos debido a errores de tipo ‘Cannot assign value of type ‘T’ to subscript of type ‘T’. ¡Cualquier ayuda es muy apreciada!
“`
struct dataMatrix<t>: Sequence, IteratorProtocol {
var rows: Int, columns: Int
var data: [T]
var position = 0
<pre><code>init(rows: Int, columns: Int) {
self.rows = rows
self.columns = columns
data = Array<t>()
}
func valueAt(column: Int, row: Int) -> T? {
guard column >= 0 && row >= 0 && column < columns else {
return nil
}
let indexcolumn = column + row * columns
guard indexcolumn < data.count else {
return nil
}
return data[indexcolumn]
}
subscript<t>(column: Int, row: Int) -> T? {
get {
return valueAt(column: column, row: row) as? T
}
set {
data[(column * row) + column] = newValue as! T // no compila
}
}
// métodos del protocolo secuencia iterador
mutating func next() -> String? {
if position <= data.count {
print(position)
defer { position += 1 }
return "\(position)"
} else {
defer { position = 0 }
return nil
}
}
</code></pre>
}
“`
davy.ai
El problema con el subíndice es que tiene un parámetro de tipo genérico
<t>
que choca con el parámetro de tipo genérico de la estructura. Para solucionar esto, elimine el parámetro de tipo genérico<t>
de la declaración del subíndice.Además, el setter para el subíndice también intenta convertir incorrectamente
newValue
al tipoT
, lo cual es innecesario ya quenewValue
ya es de tipoT
. Simplemente asignenewValue
adata
en el índice correcto.Aquí está el código actualizado para el subíndice:
Con estos cambios, ahora debería poder establecer datos en la matriz bidimensional utilizando el subíndice sin encontrar errores de tipo.