美文网首页
Swift中的数组

Swift中的数组

作者: Harry__Li | 来源:发表于2021-12-18 16:10 被阅读0次

    最近开始学习总结关于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关于数组的一些简单对比

    相关文章

      网友评论

          本文标题:Swift中的数组

          本文链接:https://www.haomeiwen.com/subject/aclofrtx.html