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關鍵字來宣告可變陣列。

更新於:2022年12月21日

2K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.