概要:
上記の答えはベータ3まで真実でした(そして将来のリリースで再び変更される可能性があります)
スライスは配列のように機能するようになりましたが、@ mattが上で述べたように、変更が加えられるまで、事実上、内部の配列への浅いコピーです。スライス(現在)には、元の値のスナップショットが表示されます。
また、スライス構文が変更されていることにも注意してください。
[from..upToButNotIncluding] -> [from..<upToButNotIncluding]
例:
var arr = ["hello", "world", "goodbye"]
var arrCopy = arr
let slice = arr[0..<2]
arr[0] = "bonjour"
arr
arrCopy
slice
これにより、Pythonスタイルのリスト処理(あるリストをフィルタリングして別のリストを作成する)を実行する方が簡単(IMHO)であるため、はるかに均一な処理が可能になります。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の配列は完全に再設計され、DictionaryやString ... mのような完全な値のセマンティクスを持つようになりました。」