Come inizializzare una matrice in rapido con una capacità specifica?Array Swift init con capacità
ho provato:
var grid = Array <Square>()
grid.reserveCapacity(16)
ma ottengo l'errore
expected declaration
Come inizializzare una matrice in rapido con una capacità specifica?Array Swift init con capacità
ho provato:
var grid = Array <Square>()
grid.reserveCapacity(16)
ma ottengo l'errore
expected declaration
ne dite:
class Square {
}
var grid = Array<Square>(count: 16, repeatedValue: Square());
Anche se questo chiamerà il costruttore per ogni quadrato.
Se hai fatto la matrice avere istanze piazza opzionale è possibile utilizzare:
var grid2 = Array<Square?>(count: 16, repeatedValue: nil);
EDIT: Con Swift3 questa firma di inizializzazione è cambiato al seguente:
var grid3 = Array<Square>(repeating: Square(), count: 16)
o
var grid4 = [Square](repeating: Square(), count: 16)
Naturalmente, entrambi funzionano anche con Square?
e nil
.
Ho scoperto che chiama solo 'Square()' per una volta. Quindi tutte le istanze di questo array puntano allo stesso riferimento. –
Questo non è corretto. Questo crea una matrice con 16 valori. OP ha chiesto di creare un nuovo array vuoto con _capacity_ per contenere 16 valori. Credo che questo non possa essere realizzato in Swift. È possibile solo creare l'array vuoto _and_then_ riservare la capacità. –
Prova:
var grid = Array<Square>(count: 16, repeatedValue: aSquare)
var actions:[AnyObject?] = [AnyObject?](count: 3, repeatedValue: nil)
Swift 3
var grid : [Square]?
grid?.reserveCapacity(16)
credo che può essere raggiunto in una sola riga pure.
Ho riscontrato problemi con la risposta accettata con 'repeat: nil' quindi questa era una soluzione migliore per me. –
Si sta verificando quell'errore perché si sta effettuando una chiamata di metodo all'esterno di una funzione (in una classe, in una struttura, in una enum o al livello superiore). Prova questo all'interno di una funzione, oppure sposta la chiamata reserveCapacity nel metodo init() della tua classe. – Bill