Risposte:
C'è un metodo (in realtà una funzione)
myArray.removeAll()
struct
struct hanno a functions
differenza delle classi che hanno methods
.
Array
che sono struct
s.
removeAll()
. Tuttavia è buona pratica (disciplina della memoria) rimuovere tutti i dati non necessari quando una vista scompare.
Dando per scontato che la risposta di @vadian sia la soluzione , vorrei solo far notare che il tuo codice non funziona.
Prima di tutto, gli indici degli array sono basati su 0, quindi dovresti riscrivere l'intervallo di conseguenza:
for index 0..<myArray.count {
myArray.removeAtIndex(index)
}
Tuttavia, questa implementazione causerà un arresto anomalo. Se hai un array di 10 elementi, l'ultimo elemento occupa la posizione nell'indice 9.
Usando quel ciclo, alla prima iterazione l'elemento all'indice 0 viene rimosso e questo fa sì che l'ultimo elemento si sposti verso il basso all'indice 8.
Alla successiva iterazione, l'elemento all'indice 1 viene rimosso e l'ultimo elemento si sposta all'indice 7. E così via.
Ad un certo punto del ciclo, un tentativo di rimuovere un elemento per un indice inesistente provocherà l'arresto anomalo dell'app.
Quando si rimuovono elementi da un array in un ciclo, il modo migliore per farlo è attraversarlo in ordine inverso:
for index in reverse(0..<myArray.count) {
myArray.removeAtIndex(index)
}
Ciò garantisce che gli elementi rimossi non modificano l'ordine o l'indice degli elementi ancora da elaborare.
public extension Array where Element : Equatable { public mutating func remove(element: Element) -> Int { var occurrences = 0; for index in (0 ..< count).reverse() { if self[index] == element { removeAtIndex(index); occurrences += 1 } }; return occurrences } }
preferibilmente non tutta una riga ma quel codice dovrebbe essere compilato su una riga
for _ in 0...<myArray.count { myArray.removeAtIndex(0) }
? Non so ancora molto sull'efficienza, ma in questo modo non è necessario invertire la gamma, quindi forse è più veloce.
Ti manca la in
parola chiave che causa il tuo errore. Il codice dovrebbe essere:
for index in 1...myArray.count {
myArray.removeAtIndex(index)
}
Tuttavia, questo non funzionerà come ti aspetteresti per un paio di motivi:
count - 1
che richiederebbe1..<myArray.count
Se stai cercando di rimuovere tutte le cose dall'array, dovresti fare come altri hanno suggerito e usare:
myArray.removeAll()
Nel caso in cui desideri solo il primo elemento e nient'altro, potresti ottenere un riferimento al primo oggetto, svuotare l'array, quindi aggiungere nuovamente l'oggetto:
var firstElement = myArray.first!
myArray.removeAll()
myArray.append(firstElement)
count - 1
).
Il tuo codice dovrebbe funzionare, è appena fuori limite.
Swift 3
existingArray = []
In questo modo si riassegna un array vuoto all'array esistente e si fa riferimento al tipo di dati.
In alternativa, è possibile utilizzare removeAll
che rimuove tutti gli elementi dall'array e fornisce un'opzione per mantenere la capacità esistente.
existingArray.removeAll()
Questa è una mutating
funzione che significa che l'array che chiama il metodo verrà cambiato (vuoto).
Kyle è sulla strada giusta, ma il suo codice fallirà poiché i possibili indici si riducono durante l'enumerazione, portando a indici illegali.
Un modo per risolverlo è enumerare all'indietro. In modo rapido questo viene fatto usando i passi .
for index in stride(from: myArray.count - 1, through: 0, by: -1) {
myArray.removeAtIndex(index)
}
un'altra opzione sarebbe quella di utilizzare filter()
Swift 1.2
myArray = filter(myArray, { (obj) -> Bool in
return false
})
Swift 2
myArray = myArray.filter{ (obj) -> Bool in
return false
}
stride
È disponibile il metodo removeAllObjects () in Swift 2
Syntax : public func removeAllObjects()
Eg.: mainArray.removeAllObjects
Per rimuovere un elemento in un particolare indice utilizzare:
Syntax : public func removeObjectAtIndex(index: Int)
Eg.: mainArray.removeObjectAtIndex(5)
Per rimuovere l'ultimo elemento utilizzare:
Syntax : public func removeLastObject()
Eg.: mainArray.removeLastObject()
Per rimuovere elementi in una gamma particolare utilizzare:
Syntax : public func removeObject(anObject: AnyObject, inRange range: NSRange)
Per rimuovere un particolare elemento utilizzare:
Syntax : public func removeObject(anObject: AnyObject)
La schermata sottostante mostra l'elenco dei metodi disponibili nell'estensione NSMutableArray
Puoi anche farlo:
for _ in myArray
{
myArray.removeAtIndex(0)
}
Vadian ha la risposta corretta in termini di ciò che stai cercando di ottenere. Il problema mostrato come risultato dell'esempio di codice è dovuto al modo in cui stai tentando di creare il for
ciclo. Index
inizierà da 0 per impostazione predefinita. L'aggiunta di un intervallo di numeri dopo non è il modo corretto per creare un ciclo for. Ecco perché visualizzi l'errore. Invece, crea il tuo ciclo for come segue:
for index in myArray.indices {
// Do stuff
}
Si spera che questa risposta aiuti gli altri che non conoscono Swift o la programmazione.
Per rimuovere tutti gli elementi dell'array
var array = [1,2,3,4,5,6]()
array.removeAll()