Array和NSArray的区别是什么?
由于Array和NSArray都是iOS开发中的核心结构,我们有时会忘记它们之间有多大的不同。以下是一些你应该了解的两种结构之间的一些主要区别。
Array是一个结构体,因此它是Swift中的值类型。NSArray是一个不可变的Objective-C类,因此它是Swift中的引用类型。
Array是Swift结构,也是泛型结构,这意味着它可以是任何特定类型的数组(Int、String等)。[T]是Array<T>的语法糖。NSArray是Objective-C结构,可以容纳任何Objective-C对象,并且可以透明地映射到Array<AnyObject>。
数组可以存储一种类型的数据,而NSArray可以保存不同类型的数据。
Swift中有三种类型的数组——Array、NSArray和NSMutableArray。而Objective-C只有两种类型的数组。
Array语法
// declare an immutable array let arrayName: [valuetype] = [array element 1, array element 1, ...array element n] // declare a mutable array var arrayName: [valuetype] = [array element 1, array element 1, ...array element n]
在Swift中,我们可以用let声明不可变数组,用var声明可变数组。对于不可变数组,我们必须在初始化时提供数组元素。
Array
示例
让我们来看一个例子来理解它们的区别:
var languagesArray = ["Swift", "Objective-C", "Java", "Python"] func modifyArray1(array: [String]) { var inputArray = array inputArray[2] = "C++" } modifyArray1(array: languagesArray) print(languagesArray)
输出
["Swift", "Objective-C", "Java", "Python"]
解释
在上面的例子中,你可以看到原始数组没有改变。
NSMutableArray
语法
var arrayName: NSMutableArray = [element1, element2,..... elementN]
示例
我们使用NSMutableArray来声明可变数组及其元素。我们也可以声明一个空数组,以便稍后在代码中追加元素。
import Foundation var languagesMutableArray: NSMutableArray = ["Swift", "Objective-C", "Java", "Python"] func modifyArray2(array: NSMutableArray) { array[2] = "C++" } modifyArray2(array: languagesMutableArray) print(languagesMutableArray)
输出
( Swift, "Objective-C", "C++", Python )
解释
在上面的例子中,我们声明了一个包含一些值的可变数组。我们创建了一个函数来向数组中追加一个新值。你可以在输出中看到原始数组已经改变了。
Array和NSArray的区别 | |
---|---|
Array | NSArray/NSMutableArray |
它属于Swift库。 | 它属于Objective-C基础库。 |
提供更大的灵活性。 | 对于初学者来说有点复杂。 |
使用let和var关键字声明数组。 | NSArray是不可变的,NSMutableArray是可变的。 |
它是Swift语言中的结构体类型。 | 这些是Objective-C的类类型。 |
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
结论
Swift为我们提供了可变和不可变两种类型的数组。我们可以根据需要使用它们。如果我们不想更改数组的原始元素,我们可以使用let关键字将其设为常量,否则将使用var关键字来声明可变数组。