Резюме:
Вышеупомянутые ответы были верны до Beta 3 (и могут снова измениться в будущих выпусках)
Slice теперь действует так же, как массив, но, как @matt сказал выше, фактически является неглубокой копией массива под капотом, пока не будут внесены изменения. Срезы (сейчас) видят снимок исходных значений,
Также обратите внимание, что синтаксис среза изменился:
[from..upToButNotIncluding] -> [from..<upToButNotIncluding]
Пример:
var arr = ["hello", "world", "goodbye"]
var arrCopy = arr
let slice = arr[0..<2]
arr[0] = "bonjour"
arr
arrCopy
slice
Это обеспечивает гораздо более единообразную обработку, поскольку проще (IMHO) выполнять обработку списков в стиле Python - фильтровать один список для создания другого. согласно ответу Мэтта до Beta 3 вам нужно было создать временный массив, чтобы сопоставить срез. Новый код стал проще:
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
(хотя, честно говоря, foo по-прежнему кусок)
Справка:
http://adcdownload.apple.com//Developer_Tools/xcode_6_beta_3_lpw27r/xcode_6_beta_3_release_notes__.pdf
Важные изменения, проблемы решены, - Swift Language, параграф 1
«Массив в Swift был полностью переработан, чтобы иметь полноценную семантику, такую как Dictionary и String ... m»