swift数组的使用和操作全解 – Swift最新教程

上一章Swift教程请查看:swift guard语句

在本教程中,你将了解Swift数组、创建数组、访问数组的值以及数组中的一些常见操作。

在前面的文章中,我们了解了如何创建某些数据类型的变量/常量来保存单个值。

但是,如果我们想要存储相同数据类型的多个值,该怎么办呢?我们在Swift中使用数组。

什么是数组?

一个数组就是一个容器,它可以在一个有序列表中保存一个数据类型的多个数据(值),也就是说,你可以按照定义数组中元素的顺序来获取元素。

数组可以存储任何数据类型的值,例如int、String、class等。

如何在Swift中声明数组?

可以通过在方括号[]中指定数据类型来创建空数组。

记住,你必须把类型包含在方括号里,否则Swift会把它当作普通的数据类型,你只能在里面存储一个值。

例1:声明一个空数组

let emptyIntArr:[Int] = []
print(emptyIntArr)

在上面的程序中,我们声明了一个常量emptyIntArr,它可以存储整数数组并使用0值初始化。

或者

你也可以定义一个空数组如下:

let emptyIntArr:Array<Int> = Array()
print(emptyIntArr)

或者

由于swift是一种类型推断语言,你也可以直接创建数组,而无需指定数据类型,但必须用一些值初始化,以便编译器可以推断其类型为:

例2:用一些值声明一个数组

let someIntArr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(someIntArr)

在上面的程序中,我们声明了一个常量someIntArr,它可以存储整数数组而不显式地指定类型。此外,我们已经初始化数组与1,2,3,4,5,6,7,8,9值。

示例3:声明一个包含单个重复值的指定数目的数组

你还可以重复一个值的给定次数,以形成一个数组,在Swift中这是通过使用具有重复和计数的数组初始化器实现的。

let arrWithRepeatingValues = Array(repeating: "Hello, World", count: 4)
print(arrWithRepeatingValues)

在上面的程序中,我们定义了一个常数arrWithRepeatingValues,它存储了一个字符串数组Hello, World,并按count中指定的次数重复4次相同的值。

注意:在Swift中,不能像在其他编程语言中那样创建固定长度大小的数组。固定长度大小数组的意思是,数组不能有比你在初始化时定义的更多的元素。

值如何存储在数组中?

假设你有一个常量,可以存储字符串数组如下:

let intArr = [21, 34, 54, 12]

值是如何存储在数组中的图形表示如下:

值如何存储在数组中

你创建的所有数组都以索引0开始,第一个元素存储在索引0中,第二个元素存储在下一个索引(1)中,依此类推。

在Swift中如何访问数组元素?

你可以使用下标语法访问数组的元素,即你需要将要访问的值的索引包含在方括号中,紧接在数组名称之后。

假设你像上面那样在intArr中声明了一个数组,第一个元素是intArr[0],第二个元素是intArr[1],以此类推。

在Swift中如何访问数组元素

例4:访问数组的元素

let intArr = [21, 34, 54, 12]
print(intArr[0])
print(intArr[1])
print(intArr[2])
print(intArr[3])

如何在Swift中修改/添加数组元素?

你可以使用下标语法和赋值运算符来修改数组的元素,也就是说,你需要将要更新的值的索引包含在方括号中,位于数组名称之后,然后是赋值运算符和新值。

例5:修改数组的元素

var intArr = [21, 34, 54, 12]
intArr[0] = 12
intArr[1] = 42
intArr[2] = 45
intArr[3] = 21
print(intArr)

你还可以修改数组的所有元素与新值如下:

示例6:作为一个整体修改一个数组

var intArr = [21, 34, 54, 12]
intArr = [1,2,3]
print(intArr)

但是,要在现有数组中添加新元素,不能使用下标语法。如果这样做,你将以一个错误结束,因而不能这样做:

示例7:使用下标语法在数组中添加新元素(不起作用)

var intArr = [21, 34, 54, 12]
intArr[4] = 10

当你运行程序时,输出将是:

fatal error: Index out of range

上面的程序在向intArr数组分配新元素时出错。这是因为intArr没有为索引4分配额外的内存,也不能存储给定的值。

要正确地将新元素插入数组,我们使用数组的append()方法,append()将在下一节中进行讨论。

一些有用的内置数组函数和属性

isEmpty

此属性确定数组是否为空。如果数组不包含任何值,则返回true,否则返回false。

例8:isEmpty是如何使用的?

let intArr = [21, 34, 54, 12]
print(intArr.isEmpty)

first

此属性用于访问数组的第一个元素。

例9:first如何使用?

let intArr = [21, 34, 54, 12]
print(intArr.first)

append

append函数用于在数组末尾插入/追加元素。

示例10:append如何使用?

var intArr = [21, 34, 54, 12]
intArr.append(32)
print(intArr)

还可以将一个数组的内容追加到另一个数组:

var firstArr = [1,2,3,4]
var secondArr = [5,6,7,8]
firstArr.append(contentsOf: secondArr)
print(firstArr)

insert

此函数用于在数组的特定索引处插入/追加元素。

例11:insert如何使用?

var intArr = [21,34,54,12]
intArr.insert(22, at: 1)
print(intArr)

类似地,你还可以使用remove属性来删除指定索引处的元素。

Remove

此函数从数组中删除并返回指定位置的值。

例12:如何删除数组元素?

var strArr = ["ab","bc","cd","de"]
let removedVal = strArr.remove(at: 1)
print("被删除的值为 \(removedVal)")
print(strArr)

类似地,你还可以使用像removeFirst这样的函数来删除数组的第一个元素,removeLast来删除数组的最后一个元素,removeAll来清空数组。

reversed

这个函数以相反的顺序返回数组中的元素。

例13:reverse()如何使用?

var intArr = [21,22,23,24]
let reversedArr = Array(intArr.reversed())
print(reversedArr)

count

此属性返回数组中元素的总数。

例14:count属性的使用

let floatArr = [10.2,21.3,32.0,41.3]
print(floatArr.count)

使用数组的注意事项

在Swift中使用下标语法访问数组元素时,必须确保该值位于索引中,否则将导致运行时崩溃,让我们看看这个例子:

let intArr = [21, 34, 54, 12]
print(intArr[-1])

在上面的程序中,索引-1中没有值。因此,当你试图访问索引中的值时,你将得到一个运行时崩溃。

要防止这种情况,首先找到要删除的元素的索引,然后删除索引指定的元素如下:

var intArr = [21, 34, 54, 12]
if let index = intArr.index(of: 34) {
    print("found index")
    let val =  intArr.remove(at: index)
    print(val)
}
微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?