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关于数组的一些简单对比

上一篇下一篇

猜你喜欢

热点阅读