我有两个变量,一个是可变数组,第二个变量是不可变的。Swift NSArray突变
let mutableArray = NSMutableArray(array: ["1","2","3"])
let immutableArray: NSArray = mutableArray
但是当我做追加元素到mutableArray
我immutableArray
也在发生变化。
所以我的假设是使用.copy
immutableArray
分配。但是解决这个问题的最佳方法是什么?
我有两个变量,一个是可变数组,第二个变量是不可变的。Swift NSArray突变
let mutableArray = NSMutableArray(array: ["1","2","3"])
let immutableArray: NSArray = mutableArray
但是当我做追加元素到mutableArray
我immutableArray
也在发生变化。
所以我的假设是使用.copy
immutableArray
分配。但是解决这个问题的最佳方法是什么?
您应该使用Swift基础类型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
:
let numbers = NSArray(array: [1, 2, 3])
let strings = numbers.map { ($0 as AnyObject).description }.flatMap { $0 }
print(strings) // ["1", "2", "3"]
这仅仅是丑陋和杂乱......那么,为什么不使用Array
马上呢? :)
你能做到这样
let mutableArray = NSMutableArray(array: ["1","2","3"])
let immutableArray: NSArray = NSArray(array: mutableArray)
mutableArray.add("4")
print(mutableArray) // (1,2,3,4)
print(immutableArray) // (1,2,3)
你 做作业'让immutableArray:NSArray的= mutableArray' 不作深层副本。 你的假设是正确的,因为你需要制作'.copy'。 –
@ShamasS但是如果数组非常大,使用.copy会不会影响性能? –
如果它们相当大,'copy'肯定会很贵。 –