Array 和 NSArray 有什么区别?
由于 Array 和 NSArray 都是 iOS 开发中的核心结构,我们有时会忘记它们之间的区别。以下是您应该了解的这两个结构之间的一些主要区别。
Array 是一个结构体,因此在 Swift 中它是值类型。NSArray 是一个不可变的 Objective C 类,因此在 Swift 中它是引用类型。
Array 是一个 Swift 结构体,并且是一个泛型结构体,这意味着它可以是任何特定类型(Int、String 等)的数组。[T] 是 Array<T> 的语法糖。 NSArray 是一种 Objective-C 结构,可以存储任何 Objective-C 对象,并且可以透明地映射到 Array
或从 Array 映射。 数组可以存储一种类型的数据,而 NSArray 可以存储不同类型的数据。
Swift 中有三种类型的数组 - Array、NSArray 和 NSMutableArray。而 Objective-C 只有两种数组类型。
数组语法
// 声明一个不可变数组 let arrayName: [valuetype] = [array element 1, array element 1, ...array element n] // 声明一个可变数组 var arrayName: [valuetype] = [array element 1, array element 1, ...array element n]
在 Swift 中,我们可以使用 let 声明不可变数组,使用 var 声明可变数组。对于不可变数组,我们必须在初始化时提供数组元素。
数组
示例
让我们看一个例子来理解它们的区别 -
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 关键字。