Swift 中的值类型与引用类型

2020-12-15  本文已影响0人  H丶ym

值类型

在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
上一篇 下一篇

猜你喜欢

热点阅读