Swift中的数组
2021-12-18 本文已影响0人
Harry__Li
最近开始学习总结关于Swift的知识,今天先从最基础的数组开始。对比OC的数组方法来学习,这样更容易对比学习
初始化
oc
NSMutableArray *mutArray = [NSMutableArray array];
NSMutableArray *mutAr = [NSMutableArray arrayWithCapacity:100];
NSArray *array = @[@"dskfj",@"df",@"sd",@"f"];
NSMutableArray *mutarr3 = [[NSMutableArray alloc]initWithArray:array];
//通过类方法
NSMutableArray *mutarr5 = [NSMutableArray arrayWithObjects:@"sdj",@"dsf", nil];
上面这些应该就是我们oc中常用的创建可变数组的方法了吧。我们在对比下Swift中的创建
Swift
//数组初始化
var dataarry6:[String] = Array()
var dataaaay7:[Int] = Array()
var arr = [String]()
var arr1 = Array<String>()
//数组
var dataarr = ["张三","李四","王五","赵六"]
var dataarr1 :[String]=["法外狂徒张三","李四","灰太狼"]
var dataarray2 = [12,"12",19] as [Any]
var dataarray3 :[Any] = [12,"20",20]
var dataarray4 :[Int] = []
var dataarr5 :[CGColorSpaceModel] = []
相较于oc,swift的创建就简单的多。但值得注意的是,你必须把你在数组中存储的类型告诉系统。可能有的时候,我不仅要存string类型,还要存int类型。那怎么办。你可以吧类型写成any。当我们在写项目的时候,一般数组中存储的都是自定义的model,只要告诉系统,你要存储的类型即可。
增
oc
//1、增加一个元素
[mutArray1 addObject:@"!"];
NSLog(@"mutArray1-1 = %@", mutArray1);
//2、增加多个
[mutArray1 addObjectsFromArray:@[@"Oh", @"right"]];
NSLog(@"mutArray1-2 = %@", mutArray1);
整两个方法应该是我们oc中用的最多的把
swift
//增加一个元素
dataarr.append("zhangliang")
dataarr+=["2"]
//增加多个
//合并数组(类型必须保持一样)
dataarr+=dataarr1
print(dataarr)
就如注释中提示的,在添加数组的时候,要保证两个数组的类型是一样的。否则会报错 添加不成功
删
oc
[mutArray removeObject:@"sd"];
//1.2按下标删
[mutArray removeObjectAtIndex:3];
//1.3删除最后一个
[mutArray removeLastObject];
[mutArray removeObjectsAtIndexes:set4];
//删除全部
[mutArray removeAllObjects];
Swift
dataarr.remove(at: 2)
print(dataarr)
dataarr.removeFirst()
print(dataarr)
dataarr.removeLast()
print(dataarr)
dataarr.removeSubrange((1..<4))
print(dataarr)
dataarr.removeAll()
print(dataarr)
改
oc
[array1 replaceObjectAtIndex:2 withObject:@"hhh"];
NSArray *replace =@[@"five",@"six",@"seven",@"eight",@"nine",@"ten"];
[array4 replaceObjectsInRange:NSMakeRange(1,2)withObjectsFromArray:replace];//批量修改
//数组当前范围
[array insertObject:@"f" atIndex:0];
swift
dataarr.replaceSubrange((1...3), with: ["2"])
print(dataarr)
dataarr.replaceSubrange((0..<1), with: ["mingzi"])
print(dataarr)
//插入元素
dataarr.insert("插入的元素", at: 2)
//插入数组
dataarr.insert(contentsOf: dataarr1, at: 1)
数组的遍历
oc
//索引遍历
for (NSInteger i=0; i<count; i++) {
NSLog(@"%@----%@",array[i],[NSThread currentThread]);
}
//forin快速枚举
for (NSString *string in array) {
NSLog(@"%@----%@",string,[NSThread currentThread]);
}
// 顺序遍历
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@----%@",array[idx],[NSThread currentThread]);
if (idx == 5) {
*stop = YES; // 停止遍历
}
}];
// 倒序遍历
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"%@----%@",array[idx],[NSThread currentThread]);
if (idx == 5) {
*stop = YES; // 停止遍历
}
}];
看了上面的oc遍历方法,再来看swift中的遍历
//直接取值遍历
for item in testarr {
print("输出的是:\(item)")
}
//通过索引遍历
for i in 0..<testarr.count{
print(testarr[i])
}
for item in testarr[0...] {
print("shuchudeshi:\(item)")
}
for item in testarr[0...2] {
print("遍历莫一段数组:\(item)")
}
for index in (0..<testarr.count).reversed() {
print("反向输出:\(testarr[index])")
}
上面就是swift和oc关于数组的一些简单对比