在Swift中:数组VS NSArray VS [AnyObject]之间的差异

shl*_*821 37 collections ios data-structures swift

正如标题所说,Array vs NSArray与[AnyObject]之间有什么区别?

此外,最推荐的方法是什么.我的意思是推荐,最简单的实现是什么.谢谢.

Krz*_*zak 61

Array是一个结构,因此它是Swift中的值类型. NSArray是一个不可变的Objective C ,因此它是Swift中的一个引用类型,它是桥接的Array<AnyObject>. NSMutableArray是可变子类NSArray.

var arr : NSMutableArray = ["Pencil", "Eraser", "Notebook"]
var barr = ["Pencil", "Eraser", "Notebook"]

func foo (var a : Array<String>)
{
    a[2] = "Pen"
}

func bar (a : NSMutableArray)
{
    a[2] = "Pen"
}

foo(barr)
bar(arr)

println (arr)
println (barr)
Run Code Online (Sandbox Code Playgroud)

打印:

(
    Pencil,
    Eraser,
    Pen
)
[Pencil, Eraser, Notebook]
Run Code Online (Sandbox Code Playgroud)

因为foo更改了本地值abar更改了引用.如果您这样做let arr而不是var与其他引用类型一样,它也将起作用.


Dav*_*rry 22

Array 是一个Swift构造和泛型结构,这意味着它可以是任何特定类型的数组(Int,String,AnyObject等)

[T] 是语法糖 Array<T>

AnyObject 是任何类的对象,包括Objective-C类.

NSArray 是一个Objective-C构造,可以保存任何Objective-C对象,并透明地映射到或来自 Array<AnyObject>