概要:
直到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之前Matt的回答,您必须创建一个临时数组才能映射切片。现在,新代码更加简单:
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语言,第1段
“ Swift中的数组已被完全重新设计,以具有字典和String ... m等全值语义。”