5. 引用计数,一个类实例可以有多个引用
1. 定义语法
struct Name{
let firstName = ""
let secondName = ""
}
class Student{
var name = Name()
var height = 0.0
var score = 0
}
let a = Student()
如代码所示,我们定义了一个结构体Name和一个类Student。在定义结构体和类的过程中有以下几点需要注意
注意:
① 基于书写规范,结构体和类的定义最好首字母大写
② 结构体和类的定义中,每个属性均需要给出默认值,否则编译器会报错
2. 访问属性以及结构类型初始化
let name1 = Name(firstName:"小",secondName:"本狼") let a = Student() a.name = name1; a.height = 185
struct Name{
var firstName = ""
var secondName = ""
}
var a = Name(firstName:"小",secondName:"笨狼")
var b = a
a.firstName = "大"
println(b.firstName) //输出:小 如上面的例子所示,结构类型的赋值是完整的创建一个新的值,原来对象改变不会对赋值对象产生任何影响struct Name{
var firstName = ""
var secondName = ""
}
class Student{
var name = Name()
var height = 0
var score = 0
}
let a = Student()
let b = a
a.score = 98
println(b.score) //输出:98 如上面的例子所示,将a对b赋值,a的属性改变,b的属性也会随之改变,因为a和b是2个指针,他们都指向同一地址let a = Student()
let b = a
if a === b{
println("a=b")
}else{
println("a != b")
} //输出 a=b 如上面的代码所示,a和b指向同一个实例,会输出a=b。 1. 字典的赋值和复制操作
var ages = ["Peter": 23, "Wei": 35, "Anish": 65, "Katya": 19] var copiedAges = ages ages["Wei"] = 0 println(ages) //输出:[Anish: 65, Wei: 0, Peter: 23, Katya: 19] println(copiedAges) //输出:[Anish: 65, Wei: 35, Peter: 23, Katya: 19]由于字典是数值类型,赋值的时候会完整的赋值。
2. 数组的赋值和复制操作
和字典Dictionary类型比起来,数组Array的赋值和复制操作就更加复杂。Array类型和C语言中的类似,仅仅只会在需要的时候才会完整复制数组的值。
如果将一个数组赋值给一个常量或者变量,或者作为一个参数传递给函数,复制在赋值和函数调用的时候并不会发生。这两个数组将会共享一个元素序列,如果你修改了其中一个,另外一个也将会改变。
对于数组来说,复制只会在你进行了一个可能会修改数组长度操作时才会发生。包括拼接,添加或者移除元素等等。当复制实际发生的时候,才会像字典的赋值和复制操作一样。
var a = [1,2,3] var b = a a[0] = 5 println(a) //输出:[5, 2, 3] println(b) //输出:[5, 2, 3] a.append(4) println(a) //输出:[5, 2, 3, 4] println(b) //输出:[5, 2, 3]如上面例子所示:
var a = [1,2,3] var b = a a.unshare() b[0] = 5 println(a) //输出:[1, 2, 3] println(b) //输出:[5, 2, 3]重点:
var a = [1,2,3]
var b = a
if a === b{ } 注意:var a = [1,2,3] var b = a.copy()注意:
原文地址:http://blog.csdn.net/xbenlang/article/details/30073043