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