Swift 中的值类型与引用类型

值类型

  • 地址中直接存储具体值(print时直接输出内容,不是地址信息)
  • 在传递过程中,相当于copy了一份新的,类似深拷贝
  • 值类型默认是不可以修改的

在Swift中结构体struct是值类型、类class是引用类型

注意:在编写代码过程中,应该尽量避免值类型包含引用类型

Swift中的类

class Teacher {
    var age: Int = 28
    func teach(){
        print("teach")
    }
}

var t = Teacher()
var t2 = t

添加断点查看tt2

我们可以看到地址是一样的,修改t2后,t的值也会跟着变化,与OC中一样

Swift 中的结构体

结构体的属性初始值要不就有默认值,要不就在init方法中赋值

struct Teacher {
    var age: Int = 28
    func teach(){
        print("teach")
    }
}
var t = Teacher()
var t2 = t
t2.age = 18
print(t)
Teacher(age: 28)
Program ended with exit code: 0

我们可以发现tt2本质上就是两个东西,修改t2,跟t无关

inout关键字

一般情况下,在函数的声明中,默认的参数都是不可变的,如果想要直接修改,需要给参数加上inout关键字

class Teacher {
    func test(_ a: inout Int) {
        a = a + 1
    }
}
var age = 30
var t = Teacher()
t.test(&age)
print(age)

mutaing关键字

在函数内动态修改属性
本质上是值类型函数中self添加了inout关键字,相当于在值传递的过程中,传递的是引用(即地址)


编译器告诉我们需要添加一个mutaing关键字,修改如下

struct Teacher {
    var age: Int = 28
    mutating func happyNewYear(){
        age = age + 1
        print(age)
    }
}

var t = Teacher()
t.happyNewYear()
29
Hello, World!
Program ended with exit code: 0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容