Swift 数组(Array)
在本教程中,您将学习数组,创建数组,访问数组的值以及数组中的一些常见操作。
在上一篇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)
运行该程序时,输出为:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
在上面的程序中,我们声明了一个常量 someIntArr,可以存储 Integer 数组,而无需显式指定类型。另外,我们用值 1、2、3、4、5、6、7、8、9 初始化了数组。
示例3:声明一个包含指定数量的单个重复值的数组
您还可以将值重复指定的次数,以在Swift中组成数组。这是通过将数组初始化器与 repeating和count 一起使用来完成的。
let arrWithRepeatingValues = Array(repeating: "Hello, World", count: 4) print(arrWithRepeatingValues)
运行该程序时,输出为:
["Hello, World", "Hello, World", "Hello, World", "Hello, World"]
在以上程序中,我们定义了一个常量 arrWithRepeatingValues,该常量存储字符串 Hello,World 的数组,并重复相同的值4次,如示例中所指定count。
注意:在Swift中,不能像在其他编程语言中那样创建定长大小的数组。固定长度大小的数组意味着,数组不能包含比您在初始化期间定义的元素更多的元素。
值如何存储在数组中?
假设您有一个可以存储字符串数组的常量,如下所示:
let intArr = [21, 34, 54, 12]
值如何存储在数组中的图形表示如下所示:
您创建的所有数组都从索引0开始。第一个元素存储在索引0中,第二个元素存储在下一个索引(1)中,依此类推。
如何在Swift中访问数组元素?
您可以使用 下标语法来访问数组的元素,即您需要在数组名称后的方括号内包括要访问的值的索引。
假设您如上所述声明了一个数组 intArr 。那么第一个元素是intArr[0],第二个元素是intArr[1],依此类推。
示例4:访问数组的元素
let intArr = [21, 34, 54, 12] print(intArr[0]) print(intArr[1]) print(intArr[2]) print(intArr[3])
运行该程序时,输出为:
21 34 54 12
您还可以使用for-in循环访问数组的元素。有关更多信息,请参考Swift for-in循环。
如何在Swift中修改/添加数组元素?
你可以使用下标语法和赋值操作符来修改数组的元素,也就是说,你需要在数组名称后面的方括号中包含你想要更新的值的索引,然后是赋值操作符和新值。
示例5:修改数组的元素
var intArr = [21, 34, 54, 12] intArr[0] = 12 intArr[1] = 42 intArr[2] = 45 intArr[3] = 21 print(intArr)
运行该程序时,输出为:
[12, 42, 45, 21]
您还可以使用以下新值修改数组的所有元素,如下所示:
示例6:整体修改数组
var intArr = [21, 34, 54, 12] intArr = [1,2,3] print(intArr)
运行该程序时,输出为:
[1, 2, 3]
但是,要将新元素添加到现有数组,则不能使用下标语法。如果这样做,最终将导致错误。您不能执行以下操作:
示例7:使用下标语法在数组中添加新元素(无效)
var intArr = [21, 34, 54, 12] intArr[4] = 10
运行该程序时,输出为:
fatal error: Index out of range
在将新元素分配给数组 intArr 时,上述程序给出了错误。这是因为 intArr 尚未为索引4分配额外的内存,并且无法存储给定的值。
为了正确地将新元素插入数组,我们使用array的append()方法。后面会介绍append()使用方法。
数组内置的函数和属性
1. isEmpty 属性
此属性确定数组是否为空。如果一个数组中不包含任何值,则它返回true,否则返回false。
示例8:isEmpty如何工作?
let intArr = [21, 34, 54, 12] print(intArr.isEmpty)
运行该程序时,输出为:
false
2.first 属性
此属性用于访问数组的第一个元素。
示例9:first 如何工作?
let intArr = [21, 34, 54, 12] print(intArr.first)
运行该程序时,输出为:
Optional(21)
同样,您可以使用 last 属性访问数组的最后一个元素。
3.append 函数(追加)
append函数用于在数组末尾插入/附加元素。
示例10:append如何工作?
var intArr = [21, 34, 54, 12] intArr.append(32) print(intArr)
运行该程序时,输出为:
[21, 34, 54, 12, 32]
您还可以将一个数组的内容附加到另一个数组,如下所示:
var firstArr = [1,2,3,4] var secondArr = [5,6,7,8] firstArr.append(contentsOf: secondArr) print(firstArr)
运行该程序时,输出为:
[1, 2, 3, 4, 5, 6, 7, 8]
4.insert 函数(插入)
此函数用于在数组的特定索引处插入/附加元素。
示例11:insert 如何工作?
var intArr = [21,34,54,12] intArr.insert(22, at: 1) print(intArr)
运行该程序时,输出为:
[21, 22, 34, 54, 12]
同样,您也可以使用removeproperty删除指定索引处的元素。
5.remove() 函数(移除)
此函数从数组中删除并返回在指定位置指定的值。
示例12:remove如何工作?
var strArr = ["ab","bc","cd","de"] let removedVal = strArr.remove(at: 1) print("removed value is \(removedVal)") print(strArr)
运行该程序时,输出为:
removed value is bc ["ab", "cd", "de"]
同样,您也可以使用removeFirst删除数组的第一个元素,removeLast删除数组的最后一个元素以及removeAll清空数组的功能。
6.reversed() 函数(反转)
此函数以相反的顺序返回数组的元素。
示例13:reversed()如何工作?
var intArr = [21,22,23,24] let reversedArr = Array(intArr.reversed()) print(reversedArr)
运行该程序时,输出为:
[24, 23, 22, 21]
7.count 属性(计数)
此属性返回数组中元素的总数。
示例14:count 计数
let floatArr = [10.2,21.3,32.0,41.3] print(floatArr.count)
运行该程序时,输出为:
4
注意事项
在Swift中使用下标语法访问数组元素时,必须确保该值位于索引中,否则将导致运行时崩溃。让我们在示例中看一下:
let intArr = [21, 34, 54, 12] print(intArr[-1])
运行该程序时,输出为:
fatal error: Index out of range
在上面的程序中,索引 -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) }
运行该程序时,输出为:
found index 34