• 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
    
  • 相关阅读:
    使用git fetch更新远程代码到本地仓库
    图的最短路径(C++实现)
    二叉树遍历(C++实现)
    栈的应用(C++实现)
    求25的所有本原根Python实现
    Web工作方式:浏览网页的时候发生了什么?
    Atom编辑器插件
    H5调取APP或跳转至下载
    Vue父组件传递异步获取的数据给子组件
    flex属性
  • 原文地址:https://www.cnblogs.com/KardelXiao/p/5888767.html
Copyright © 2020-2023  润新知