Swift在Swift本机类型和基础类中的等效类型之间提供了相当轻松的桥接。
数组变量[AnyObject]是否与NSMutableArray等效?
var swiftArray: [AnyObject] = ["one", "two", "three"]
var anNSArray: NSMutableArray = ["one", "two", "three"]
答案 0 :(得分:1)
嗯,不。
有许多重要的区别。
使用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(newNSArray)
/*
Displays
(
one,
two,
three,
fortytwo
)
*/
(NSArray是一个引用类型,所以赋值
var newNSArray = anNSArray
导致newNSArray保存指向现有数组的指针,而不是创建新的可变数组。更改newNSArray也会更改anNSArray,因为它们实际上是相同的数组。
另一个细微差别:print
函数在每个对象上调用description()
方法,Swift数组和NSArrays以不同方式格式化它们的描述字符串。 NSArray的描述字符串看起来很JSON,而Swift数组的描述看起来更像是用于生成数组内容的代码。