值类型
- 地址中直接存储具体值(
print
时直接输出内容,不是地址信息) - 在传递过程中,相当于copy了一份新的,类似深拷贝
- 值类型默认是不可以修改的
在Swift中结构体struct
是值类型、类class
是引用类型
注意:在编写代码过程中,应该尽量避免值类型包含引用类型
Swift中的类
class Teacher {
var age: Int = 28
func teach(){
print("teach")
}
}
var t = Teacher()
var t2 = t
添加断点查看t
、t2
我们可以看到地址是一样的,修改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
我们可以发现t
和t2
本质上就是两个东西,修改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