Sommario:
Le risposte precedenti erano vere fino alla Beta 3 (e potrebbero cambiare di nuovo nelle versioni future)
Slice ora agisce proprio come un array, ma come ha detto @matt sopra, è effettivamente una copia superficiale di un array sotto il cofano, fino a quando non viene apportata una modifica. Le sezioni (ora) vedono un'istantanea dei valori originali,
Si noti inoltre che la sintassi delle sezioni è cambiata:
[from..upToButNotIncluding] -> [from..<upToButNotIncluding]
Esempio:
var arr = ["hello", "world", "goodbye"]
var arrCopy = arr
let slice = arr[0..<2]
arr[0] = "bonjour"
arr
arrCopy
slice
Ciò consente un'elaborazione molto più uniforme, poiché è più semplice (IMHO) eseguire l'elaborazione di elenchi in stile Python, filtrando un elenco per crearne un altro. secondo la risposta di Matt prima della Beta 3, dovevi creare un array temporaneo per mappare uno slice. Il nuovo codice è ora più semplice:
class NameNumber {
var name:String = ""
var number:Int = 0
init (name:String, number:Int) {
self.name = name
self.number = number
}
}
var number = 1
let names = ["Alan", "Bob", "Cory", "David"]
let foo = names[0..<2].map { n in NameNumber(name:n, number:number++) }
foo
(anche se per essere onesti, foo è ancora una fetta)
Riferimento:
http://adcdownload.apple.com//Developer_Tools/xcode_6_beta_3_lpw27r/xcode_6_beta_3_release_notes__.pdf
Modifiche importanti, problemi risolti, - Swift Language, paragrafo 1
"Array in Swift è stato completamente ridisegnato per avere una semantica a valore pieno come Dictionary e String ... m"