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的类类型。 |
结论
Swift为我们提供了可变和不可变两种类型的数组。我们可以根据需要使用它们。如果我们不想更改数组的原始元素,我们可以使用let关键字将其设为常量,否则将使用var关键字来声明可变数组。
广告
数据结构
网络
关系数据库管理系统(RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP