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

xmjla07d  于 2022-11-06  发布在  Swift
关注(0)|答案(1)|浏览(158)

Swift在Swift原生类型和基础类中的等价类型之间提供了相当轻松的桥接。
中的数组变量[AnyObject]是否等效于NSMutableArray?

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

var anNSArray: NSMutableArray = ["one", "two", "three"]
9bfwbjaz

9bfwbjaz1#

嗯,没有。
两者之间有许多重要的区别。
使用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是一个引用类型。2因此,如果你传递Swift数组变量,实际上是在每次将它传递给另一个变量时都创建了一个新的副本。
所以这段代码:

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

* /

(When您将swiftArray赋给新变量newArray,它将创建一个具有相同内容的新可变数组。向newArray添加项不会影响swiftArray的内容。)
Wheras此代码:

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

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

* /

(The NSArray是引用类型,因此赋值

var newNSArray = anNSArray

会导致newNSArray保存指向现有数组的指针,而不是创建新的可变数组。更改newNSArray也会更改一个NSArray,因为它们实际上是同一个数组。
另一个细微差别:print函数在每个对象上调用description()方法,Swift数组和NSArrays的描述字符串格式不同。NSArrays的描述字符串看起来更像JSON,而Swift数组的描述看起来更像最初用于生成数组内容的代码。

相关问题