总结:
在 Beta 3 之前,上述答案都是正确的(并且可能会在未来的版本中再次更改)
Slice 现在的行为就像一个数组,但正如上面@matt 所说,实际上是对底层数组的浅拷贝,直到进行更改。切片(现在)查看原始值的快照,
还要注意切片语法已经改变:
[from..upToButNotIncluding] -> [from..<upToButNotIncluding]
示例:
var arr = ["hello", "world", "goodbye"] // ["hello", "world", "goodbye"]
var arrCopy = arr
let slice = arr[0..<2] // ["hello", "world"]
arr[0] = "bonjour"
arr // ["bonjour", "world", "goodbye"]
arrCopy // ["hello", "world", "goodbye"]
slice // ["hello", "world"]
这允许更统一的处理,因为执行 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 // [{name "Alan" number 1}, {name "Bob" number 2}]
(虽然公平地说,foo 仍然是一个切片)
参考:
http://adcdownload.apple.com//Developer_Tools/xcode_6_beta_3_lpw27r/xcode_6_beta_3_release_notes__.pdf
重要的变化,已解决的问题,
- Swift 语言,第 1 段
" Swift 中的数组已经完全重新设计,具有完整的值语义,如 Dictionary 和
字符串...m"