Swift基础语法-数组--对比OC

作者: DwightChan | 来源:发表于2016-07-31 00:41 被阅读47次

    一. 数组定义(比较 OC 与 Swift 的数组)

    1.1. 有值数组
    //oc 有值数组
    NSArray *arr0 = @[@1, @2, @3];
    NSArray *arr1 = [NSArray arrayWithObjects:@1, @2, @3, nil];
    NSLog(@"%@", arr1);
    /*输出结果:
    2016-01-06 01:04:49.180 test[11687:2096671] (
        1,
        2,
        3
    )*/
    
    //swift有值数组
    var arr0 = [1, 2, 3]var arr1: Array = [1, 2, 3]var arr2: Array<Int> = [1, 2, 3]
    var arr3: [Int] = [1, 2, 3]
    print(arr3)
    //输出结果: [1, 2, 3]
    
    1.2. 空数组
    //oc空数组
    NSArray *arr = @[];
    NSArray *arr1 = [NSArray array];
    NSLog(@"%@", arr1);
    /*输出结果:
    2016-01-06 01:06:04.132 test[11703:2106199] (
    )*/
    
    //swift空数组
    var arr5 = []var arr6 = [Int]()var arr7 = Array<Int>()
    print(arr7)
    //输出结果: []
    
    1.3. 可变与不可变数组
    // oc
    NSArray       //不可变数组:
    NSMutableArray//可变数组:
    
    // swift
    //可变数组:
    var arr8 = []
    //不可变数组:
    let arr9  = []
    
    1.4. 元素类型
    //OC:
    NSArray *arr = @[@1, @"cdh", @130];
    NSLog(@"%@", arr);
    /*输出结果:
    2016-01-06 01:13:07.987 test[11891:2163044] (
        1,
        cdh,
        130
    )*/
    
    //swift: (常用写法)
    var arr = [1, "CDH", 130]  // 编译器自行推导出 arr : [NSObject]
    print(arr)
    //输出结果: [1, CDH, 130]
    
    //如果想明确表示数组中存放的是不同类型的数据
    //可以使用Any 或者 NSObject 关键字, 表示数组中可以存放不同类型的数据
    var arr10:Array<Any> = [1, "CDH", 130] // 存放的字符串是带有双引号的
    print(arr10)
    //输出结果: [1, "CDH", 130] 
    // 注意 打印出来的字符串是带有双引号的
    
    var arr12 : [NSObject] = [2, "cdh", 18]
    print(arr12)
    //输出结果:[2, cdh, 18]
    
    //指定数组当中只能存放Int型,如果存放其它类型会直接报错
    var arr14:Array<Int> = [1, 10, 130]
    print(arr14)
    //输出结果: [1, 10, 130]
    
    var arr15:[Int] = [1,2,3]
    print(arr15)
    //输出结果: [1, 2, 3]
    

    二. 数组操作

    2.1. 获取长度
    //OC:
    NSArray *arr = @[@1, @2, @3];
    NSLog(@"%tu", arr.count);
    //输出结果: 2016-01-06 01:19:54.874 test[12086:2209180] 3
    
    //swift:
    var arr = [1, 2, 3]
    print(arr.count)
    //输出结果:3
    
    2.2. 判断是否为空
    //OC:
    NSArray *arr = @[];
    NSLog(@"result = %d", arr.count != 0);
    //输出结果: 2016-01-06 01:25:14.252 OCTest[12249:2255010] result = 0
    
    var arr1 = [1, 2, 3]
    print(arr1.isEmpty)
    //输出结果: false
    
    • 注意: 只有该数组有指定的存储类型,或者数组中有元素才能使用 isEmpty 这个方法, 不然会报错, 比如:
    var arr = []  // 这是个空的数组, 而且有没有指定类型, 只表示为 Array 类型
    print(arr.isEmpty) // 是会报错的
    
    2.3. 检索
    //OC:
    NSArray *arr = @[@1, @2, @3];
    NSLog(@"%@", arr[0]);
    //输出结果: 2016-01-06 01:26:46.816 OCTest[12275:2269853] 1
    
    //swift:
    var arr2 = [1, 2, 3]
    print(arr2[0])
    //输出结果: 1
    
    2.4. 追加
    //OC:
    NSMutableArray *arr =
    [NSMutableArray arrayWithObjects:@1, @2, @3, nil];
    [arr addObject:@4];
    NSLog(@"%@", arr);
    /*输出结果:
    2016-01-06 01:28:47.111 OCTest[12297:2286198] (
        1,
        2,
        3,
        4
    )*/
    
    //swift:
    var arr3 = [1, 2, 3]
    arr3.append(4);
    print(arr3)
    //输出结果: [1, 2, 3, 4]
    
    var arr4 = [1, 2, 3]
    arr4 += [4]
    print(arr4)
    //输出结果: [1, 2, 3, 4]
    
    var arr5 = [1, 2, 3]
    arr5 += [4]
    arr5 += [5,6,7]
    //输出结果: [1, 2, 3, 4, 5, 6, 7]
    
    var arr6 = [1, 2, 3]
    arr6 += [4]
    arr6 += [5,6,7]
    arr6 += arr6[0...3]
    print(arr6)
    //输出结果: [1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4]
    
    2.5. 插入
    //OC:
    NSMutableArray *arr =
    [NSMutableArray arrayWithObjects:@1, @2, @3, nil];
    [arr insertObject:@4 atIndex:0];
    NSLog(@"%@", arr);
    /*输出结果:
    2016-01-06 01:36:10.450 OCTest[12374:2339079] (
        4,
        1,
        2,
        3
    )*/
    
    //swift:
    var arr7 = [1, 2, 3]
    arr7.insert(4, atIndex: 0);
    print(arr7)
    //输出结果: [4, 1, 2, 3]
    
    2.6. 更新
    //OC:
    NSMutableArray *arr =
    [NSMutableArray arrayWithObjects:@1, @2, @3, nil];
    arr[0] = @8;
    NSLog(@"%@", arr);
    /*输出结果:
    2016-01-06 01:37:28.482 OCTest[12397:2350177] (
        8,
        2,
        3
    )*/
    
    //swift:
    var arr8 = [1, 2, 3]
    arr8[0] = 8
    print(arr8)
    //输出结果: [8, 2, 3]
    
    2.7. 删除
    //OC:
    NSMutableArray *arr1 =
    [NSMutableArray arrayWithObjects:@1, @2, @3, nil];
    [arr1 removeObject:@1];
    NSLog(@"%@", arr1);
    NSMutableArray *arr2 =
    [NSMutableArray arrayWithObjects:@1, @2, @3, nil];
    [arr2 removeLastObject];
    NSLog(@"%@", arr2);
    NSMutableArray *arr3 =
    [NSMutableArray arrayWithObjects:@1, @2, @3, nil];
    [arr3 removeAllObjects];
    NSLog(@"%@", arr3);
    /*输出结果:
    2016-01-06 01:39:49.831 OCTest[12418:2370779] (
        2,
        3
    )
    2016-01-06 01:39:49.832 OCTest[12418:2370779] (
        1,
        2
    )
    2016-01-06 01:39:49.832 OCTest[12418:2370779] (
    )*/
    
    //swift:
    var arr9 = [1, 2, 3]
    arr9.removeAtIndex(0)
    print(arr9)
    // 输出结果:[2, 3]
    
    var arr10 = [1, 2, 3]
    arr10.removeLast()
    print(arr10)
    // 输出结果:[1, 2]
    
    var arr11 = [1, 2, 3]
    //是否保持容量, 如果为true, 即便删除了容量依然存在, 容量是2的倍数
    arr11.removeAll(keepCapacity: false)
    print(arr11)
    print(arr11.capacity)
    //输出结果:
    //[]
    //0
    
    2.8. Range
    //OC:
    NSMutableArray *arr =
    [NSMutableArray arrayWithObjects:@1, @2, @3, nil];
    [arr removeObjectsInRange:NSMakeRange(0, 2)];
    NSLog(@"%@", arr);
    /*输出结果:
    2016-01-06 01:43:17.863 OCTest[12441:2396986] (
        3
    )*/
    
    //swift:
    var arr12 = [1, 2, 3]
    arr12.removeRange(Range(start: 1, end: 2))// 这里3.0 之后就不能用这个 Range(start: , end: )方法了 而是推荐使用 range = ..< 这样的取范围
    print(arr12)
    //输出结果: [1, 3]
    var arr13 = [1, 2, 3]
    arr13.removeRange(0...0)
    print(arr13)
    //输出结果: [2, 3]
    
    var range14 = 0...5
    print(range14)
    //输出结果: 0..<6
    

    三. 数组的其它操作

    3.1. 数组的批量操作
    //OC:
    NSMutableArray *arr =
    [NSMutableArray arrayWithObjects:@1, @2, @3, nil];
    NSRange range = NSMakeRange(0, 2);
    [arr replaceObjectsInRange:range
         withObjectsFromArray:@[@99, @88, @77, @66]];
    NSLog(@"%@", arr);
    /*输出结果:
    2016-01-06 14:56:45.493 OCTest[3599:667081] (
        99,
        88,
        77,
        66,
        3
    )*/
    
    //swift:
    var arr = [1, 2, 3]
    arr.replaceRange(1..<2, with: [99, 88, 77, 66])
    print(arr)
    //输出结果: [1, 99, 88, 77, 66, 3]
    
    var arr1 = [1, 2, 3]
    arr1.replaceRange(Range(start: 0, end: 2), with: [99, 88, 77, 66])
    print(arr1)
    //输出结果: [99, 88, 77, 66, 3]
    
    3.2. 遍历
    //OC:
    NSArray *arr = @[@1, @2, @3];
    for (int i = 0; i < arr.count; i++) {
       NSLog(@"%@", arr[i]);
    }
    /*输出结果:
    2016-01-06 15:00:10.702 OCTest[3635:694273] 1
    2016-01-06 15:00:10.703 OCTest[3635:694273] 2
    2016-01-06 15:00:10.703 OCTest[3635:694273] 3
    */
    NSArray *arr = @[@1, @2, @3];
    for (NSNumber *number in arr) {
         NSLog(@"%@", number);
    }
    /*输出结果:
    2016-01-06 15:03:43.192 OCTest[3684:723081] 1
    2016-01-06 15:03:43.193 OCTest[3684:723081] 2
    2016-01-06 15:03:43.194 OCTest[3684:723081] 3
    */
    
    //swift:
    var arr2 = [1, 2, 3]
    // 这种写法将在 swift3.0 被移除, 不能被使用
    for var i = 0 ; i < arr2.count ; i++{
        print(arr2[i])
    }
    
    // 推荐的使用一下三种方法
    for i in 0  ..< arr2.count{
        print(arr2[i])
    }
    for number in arr2{
        print(number)
    }
    //指定起始范围
    for number in arr2[0..<3]{
        print(number)
    }
    //输出结果都是:
    //1
    //2
    //3
    

    相关文章

      网友评论

        本文标题:Swift基础语法-数组--对比OC

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