如果把cinema的宽度更改为2048,hd的宽度不会变化,依然是1920
复制代码
cinema.width = 2048
println("cinema is now (cinema.width) pixels wide")
// prints "cinema is now 2048 pixels wide"
println("hd is still (hd.width) pixels wide")
// prints "hd is still 1920 pixels wide"
这表明当hd被赋值给cinema时,是完整地复制了一个全新的Resolution结构给cinema,所以当cinema的属性被修改时,hd的属性不会变化。
下面的例子演示的是枚举类型:
复制代码
enum CompassPoint {
case North, South, East, West
}
var currentDirection = CompassPoint.West
let rememberedDirection = currentDirection
currentDirection = .East
if rememberedDirection == .West {
println("The remembered direction is still .West")
}
// prints "The remembered direction is still .West"
尽管经过几次赋值,rememberedDirection依然没有变化,这是因为在每一次赋值过程中,都是将数值类型完整地复制了过来。
3、类是引用类型
和数值类型不同引用类型不会复制整个实例,当它被赋值给另外一个常量或者变量的时候,而是会建立一个和已有的实例相关的引用来表示它。
下面是引用的示例,VideoMode被定义为一个类:
复制代码
let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0
分别将这个实例tenEighty的四个属性初始化,然后tenEighty被赋值给了另外一个叫alsoTenEighty的常量,然后alsoTenEighty的frameRate被修改了
复制代码
let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0
由于类是一个引用类型,所以tenEighty和alsoTenEighty实际上是同一个实例,仅仅只是使用了不同的名称而已,我们通过检查frameRate可以证明这个问题:
复制代码








