- 基本语法
数组 遵从着 Array<Element> 的写法
或 简化为 [Element]
Element : 代表唯一允许存在的 数据类型 如:String,或者 Int 等
- 初始化
- 创建一个空数组
var emptyArray = [Int]()
/ 或者
var array: Array<String> = []
2.创建一个含有初始值的数组
* 类型推断
var numArray = Array(repeating: 2, count: 3)
* 指定特有的类型
var numArray1 = [Int](repeating: 2, count: 3)
// 以上2种均可以创建 数组 [2, 2, 2]
3.字面量创建
var stringArray = ["像粪一样","摩天大鸟"]
var stringArray1: [String] = ["像粪一样","摩天大鸟"]
## 🐷 不可以用 var array = [] 这种方式初始化
可以在已确定类型的数组,以这种方式进行 置空 。如:
var array = [2,3]
array = []
// array 现在是一个空数组
4.通过2个数组相加创建
var array1 = [2,3]
var array2 = [4]
var array3 = array1 + array2
// array3 = [2,3,4]
-
访问及修改
1.访问:和OC一样 通过下标,第一个元素从0开始计算
var array = ["我好像","在哪","坑过你"]
通过下标array[0] // 取到的就是 "我好像"
array.first // 取第一个
array.last // 取最后一个
2.修改
var array: Array<String> = []
array.append("1") // 添加元素 "1"
array.append("2") // 添加元素 "2"
array.remove(at: 0) // 移除第0个位置的元素,也即是 "1"
array += ["3"] // 也可以直接通过 += 添加相同类型的数组
// ["3"]
- 遍历和长度
1.遍历 for-in
var array = ["我好像","在哪","坑过你"]
for item in array {
print(item)
}
/*
我好像
在哪
坑过你
*/
2.长度 count
var array = ["我好像","在哪","坑过你"]
print(array.count) // 3
- 判空
通过isEmpty 或者 count == 0 判断
-
数组越界
数组越界 是平时开发中比较容易崩溃的一个点, 在OC 中我们可能会利用 实现NSArray 扩展
或者runtime 动态交换
方法实现,在swift中则如下:
1.对 数组 subscript方法
进行重载
判断当前index是否在 数组长度的范围之内。如果是 ,返回当前index对应的数据,如果不包含,返回nil
extension Array {
subscript (safe index: Int) -> Element? {
return (0..<count).contains(index) ? self[index] : nil
}
}
使用方式:
let array = [1,3,4,5,6]
array[safe: 6] // 返回nil
2.对 集合 subscript方法
进行重载
Iterator.Element
:迭代器,通过内部调用 next() 去寻找下一个元素,直到为nil。相当于内部在做 for - in
extension Collection {
subscript (safe index: Index) -> Iterator.Element? {
return indices.contains(index) ? self[index] : nil
}
}
#🐷 一般来说,不对集合进行越界扩展,因为字典下标越界返回的就是可选型,有点重复操作的味道
网友评论