Array 和 NSArray 有什么区别?

swiftserver side programmingprogramming更新于 2025/10/10 11:52:17

由于 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 关键字。



相关文章



关于我们 | 隐私条款 | 学习路线
返回顶部