スウィフトファンデーションタイプArray
を使用する必要があります。これらは、参照タイプではなくデフォルトおよび値タイプでは変更できません。
let numbers = [1, 2, 3] // type is: [Int]
let strings = numbers.map { $0.description } // type is: [String]
print(strings) // ["1", "2", "3"]
// THIS DOES NOT COMPILE
strings.append("foo") //Compilation error: cannot use mutating member on immultable value `strings` is a `let` constant
// Instead, super easily, declare a mutable copy just by this line
var mutableStrings = strings // since `Array` is value type, this only copies values over
mutableStrings.append("foo")
print(mutableStrings) // ["1", "2", "3", "foo"]
また、何らかの理由でNSArrayが必要ですか? Array
を使用
は使用が直接map
(上記行われるように)、reduce
、flatMap
、filter
などを使用することができ、多くの利点を有します。あなたは、その後AnyObject
にキャストし、する必要がNSArray
にmap
を使用したい場合はflatMap
を使用してoptionalsをフィルタリング:
ただ醜いと厄介です
let numbers = NSArray(array: [1, 2, 3])
let strings = numbers.map { ($0 as AnyObject).description }.flatMap { $0 }
print(strings) // ["1", "2", "3"]
...なぜ代わりに、すぐにArray
を使わないのでしょうか? NSArrayの= mutableArray` 深いコピーを作成しません::)
にあなたはimmutableArrayを聞かせて 'で行う割り当てを行うことができます。 あなたの仮定は正しいので、 '.copy'を作成する必要があります。 –
@ ShamasSしかし、配列が.copyの意志を使ってかなり大きい場合、またはパフォーマンスに影響しませんか? –
かなり大きい場合、 'copy'は間違いなく高価になります。 –