Sommaire:
Les réponses ci-dessus étaient vraies jusqu'à la bêta 3 (et pourraient changer à nouveau dans les versions futures)
Slice agit maintenant comme un tableau, mais comme @matt l'a dit ci-dessus, est en fait une copie superficielle dans un tableau sous le capot, jusqu'à ce qu'un changement soit apporté. Les tranches (maintenant) voient un instantané des valeurs d'origine,
Notez également que la syntaxe des tranches a changé:
[from..upToButNotIncluding] -> [from..<upToButNotIncluding]
Exemple:
var arr = ["hello", "world", "goodbye"]
var arrCopy = arr
let slice = arr[0..<2]
arr[0] = "bonjour"
arr
arrCopy
slice
Cela permet un traitement beaucoup plus uniforme, car il est plus simple (IMHO) de faire un traitement de liste de style python - filtrer une liste pour en créer une autre. selon la réponse de Matt avant la bêta 3, vous deviez créer un tableau temporaire afin de mapper une tranche. Le nouveau code est désormais plus simple:
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
(bien que pour être honnête, foo est toujours une tranche)
Référence:
http://adcdownload.apple.com//Developer_Tools/xcode_6_beta_3_lpw27r/xcode_6_beta_3_release_notes__.pdf
Changements importants, problèmes résolus, - Swift Language, paragraphe 1
"Array in Swift a été complètement repensé pour avoir une sémantique pleine valeur comme Dictionary et String ... m"