1. 数组
func demo(){
/**
数组同样适用 []
数字不需要包装成 NSNumber
结构体也不需要包装成 NSValue
*/
// [String] - 数组,是存放字符串的数组
// let array = ["张三","lisi"]
// as [Any] : 设置数组存放任意对象
// 数组中存放相同类型的情况多,原因:数组是通过下标来遍历的
// 数组的准确类型,可以用 option + click 判断
let array2 = ["zhangsan","lisi",12,CGPoint(x: 10, y: 10),NSValue(cgPoint: CGPoint(x: 20, y: 20))] as [Any]
print(array2)
}
2. 数组定义可变 var 不可变 let
// OC数组中的可变NSMutableArray 和 不可变 NSArray
// 可变 var 不可变 let
func demo1(){
//定义数组的时候,自动推导的类型是 [String], 决定数组中只能存放 String 类型
// Swift Any: 表示任意对象
// OC 中所有的对象都继承 NSObject
// Swift 中的对象,可以没有任何父类
var array: [Any] = ["zhangsan","lisi"]
//追加对象
array.append("wangwu")
//不能直接追加数字,如果定义数组的时候,指定类型是[Any],就可以存放数字
array.append(4)
print(array)
}
3. 数组的基本操作 - 增删改
//数组的基本操作
func demo3(){
var array = ["zhangsan","lisi"]
//增加
array.append("wanger")
print(array)
//修改 - 通过下标获取元素,然后进行修改
array[0] = "zhangsansan"
print(array)
//删除 删除第一个
array.removeFirst();
print(array);
//删除最后一个
array.removeLast()
print(array);
//删除所有元素,并且保留容量
array.removeAll(keepingCapacity: true)
// array.remove(at: 0);
print(array);
print("数组容量 \(array.capacity)")
for s in array{
print(s)
}
}
4. 测试数组容量
//测试数组容量
func demo5(){
//定义一个存放字符串的数组,并没有分配空间
var array:[String]
//分配空间
array = [String]()
for i in 0..<16 {
array .append("zhangsan \(i)")
//当插入元素时,如果容量不够,会在当前容量基础上 * 2 方便后续元素的增加
print(array[i] + " - 容量 \(array.capacity)")
}
print(array)
}
5. 实例化数组
//定义并且实例化一个空的存放字符串的数组
func demo6(){
var array = [String]()
array.append("zhangsan")
print(array)
}
6. 数组的合并
//数组的合并
func demo10(){
var array:[Any] = ["zhangsan","lisi"]
let array2:[Any] = ["xiaoxiao","binbin"]
let array3 = ["dada",12] as [Any]
//将目标 arry2 合并到 array 中
array += array2;
//注意:在合并数组的时候,数组的类型必须保持一致
array += array3
print(array)
}
7. OC中a1数组和a2数组的区别
-(void)demo{
//使用可变数组的时候,如果知道数组的容量,应该使用 Capacity 实例化数组,一次性分配
//应用场景: 从网络获取 json 字典数组,字典转模型,变成模型数组(容量可以根据字典的数组容量获得)
NSMutableArray *a1 = [NSMutableArray array];
NSMutableArray *a2 = [NSMutableArray arrayWithCapacity:2];
}