zoukankan      html  css  js  c++  java
  • Swift不可变数组

    Objective-C编写了2个不同的类来区分不可变数组(NSArray)和可变数组(NSMutableArray):

    Swift通过使用常量和变量来区分不可变数组和可变数组。

    只要将数组定义为常量,它就是不可变数组,如:

    let constantArray = ["a", "b", "c", "d"]
    

    将数组定义为变量,它就是可变数组,如:

    var mutableArray = ["e", "f", "g", "h", "i"]
    

    Swift的不可变数组和可变数组的性质与Objective-C几乎是一样的,可见笔者另文:《NSArray和NSMutableArray的copy和MutableCopy

    因此,不可变数组虽然无法改变数组本身(也就是不能在数组层面上进行修改,如设法改变数组大小、以及使用append,remove等方法),但是可以改变数组内的元素:

    class classA {                        //自定义类classA
        var aString: String               //classA的实例变量aString
        
        init(str: String) {               //构造函数
            aString = str
        }
    }
    var b: classA = classA(str:"b");      //创建3个classA类型的变量b,c,d
    var c: classA = classA(str:"c");
    var d: classA = classA(str:"d");
    let classAs = [b, c, d]               //将b,c,d作为元素定义在一个不可变数组中
    
    var f = classAs[1]                    //定义一个f变量,并赋其值为classA类型的变量c
    print(classAs[1].aString)             //输出c的实例变量的值
    f.aString = "eeee"                    //改变f的实例变量的值
    print(classAs[1].aString)             //再次输出c的实例变量的值
    

    运行结果:

    c
    eeee
    

    这里可以再做一个验证Swift字符串String类型是值类型的实验:

    let intArray = [1, 7, 100, 101, -9, 0]
    var myInt = intArray[4]
    print(intArray[4])                                               
    myInt = 10000000
    print(intArray[4])                                               //Int无疑是值类型,其值不会被改变
    
    let stringArray = ["str1", "str2", "str3", "str4"]              //定义一个字符串的不可变数组
    var myStr = stringArray[2]                                      //定义一个myStr变量,并赋值为"str3"
    print(stringArray[2])                                           //输出str3
    myStr = "anotherString"                                         //修改myStr
    print(stringArray[2])                                           //再次输出str3
    

    运行结果:

    -9
    -9
    str3
    str3
    
  • 相关阅读:
    太鼓达人
    DB2中循环日期跑数据
    DB2分区表删除和添加分区
    DB2日常运维之总结(转)
    oracle SQL not in null,单列,复合列
    利用rlwrap配置linux下oracle sqlplus 历史记录回调
    Oracle非默认监听的处理会遇到的问题以及处理方法
    Sqlserver循环嵌套
    rman全备份异机恢复
    Windows系统下Oracle数据库冷备
  • 原文地址:https://www.cnblogs.com/KardelXiao/p/5888767.html
Copyright © 2011-2022 走看看