Swift [AnyObject]数组变量是否等效于NSMutableArray?

问题描述 投票:0回答:1

Swift在Swift本机类型和基础类中的等效类型之间提供了相当轻松的桥接。

与NSMutableArray等效的数组变量[AnyObject]吗?

var swiftArray: [AnyObject] = ["one", "two", "three"]

var anNSArray: NSMutableArray = ["one", "two", "three"]
nsmutablearray swift2
1个回答
2
投票

嗯,不。

有许多重要的区别。

您使用append()方法将对象添加到AnyObject的Swift数组中。您需要使用addObject()将对象添加到NSMutableArray

var swiftArray: [AnyObject] = ["one", "two", "three"]
//swiftArray.addObject["four"] does not work.  You have to use `append()`

var anNSArray: NSMutableArray = ["one", "two", "three"]
//anNSArray.append["four"] also does not work. You have to use `addObject()`.

另一个主要区别:Swift数组是一个值类型,而等效的NSMutableArray是一个引用类型。因此,如果传递Swift数组变量,则实际上每次传递给另一个变量时都会创建一个新副本。

因此,此代码:

var swiftArray: [AnyObject] = ["one", "two", "three"]
var newArray = swiftArray
newArray.append("fortytwo")
print(swiftArray)
/*
Displays "[one, two, three]"
*/

((将swiftArray分配给新变量newArray时,它将创建具有相同内容的新可变数组。向newArray添加项目不会影响swiftArray的内容。)

使用此代码:

var anNSArray: NSMutableArray = ["one", "two", "three"]
var newNSArray = anNSArray
newNSArray.addObject("fortytwo")
print(anNSArray)

/*
Displays 
(
    one,
    two,
    three,
    fortytwo
)
*/

(NSArray是引用类型,所以赋值

var newNSArray = anNSArray

使newNSArray持有指向现有数组的指针,而不创建新的可变数组。更改newNSArray也会更改anNSArray,因为它们实际上是同一数组。

[另一个小的区别:print函数在每个对象上调用description()方法,并且Swift数组和NSArrays格式化其描述字符串的方式有所不同。 NSArray的描述字符串看起来很像JSON,而Swift数组的描述看起来更像是最初用于生成数组内容的代码。

© www.soinside.com 2019 - 2024. All rights reserved.