分别定义结构体和类
struct Resolution{ // 结构体
var width=0
var height=0
}
class VideoMode{ // 类 包含结构体,做为属性
var resolution=Resolution()
var interlaced=false
var frameRate=0.0
var name:String?
}
实例化结构体和类
let someResolution=Resolution()
let someVideoMode=VideoMode()
访问属性
print("The width of someResolution is\(someResolution.width)") // Prints "The width of someResolution is 0"
print("The width of someVideoMode is\(someVideoMode.resolution.width)") // Prints "The width of someVideoMode is 0"
someVideoMode.resolution.width=1280 // 与Objective-C不同,Swift允许您直接设置结构属性的子属性。
print("The width of someVideoMode is now\(someVideoMode.resolution.width)") // Prints "The width of someVideoMode is now 1280"
结构体成员变量初始化
let vga=Resolution(width:640,height:480)
与结构不同,类实例不接收默认的成员初始化。
Classes Are Reference Types // 类是引用类型 指针指向同一个地址,改变的是同一个对象
Structures and Enumerations Are Value Types //结构体和枚举是值类型 ,值类型是一种类型,当其被分配给变量或常量时,或者当它被传递给函数时,它的值被复制。
let hd=Resolution(width:1920,height:1080)
var cinema=hd // copy
cinema.width=2048
print("cinema is now\(cinema.width)pixels wide") // Prints "cinema is now 2048 pixels wide"
print("hd is still\(hd.width)pixels wide") // Prints "hd is still 1920 pixels wide"
Identity Operators // 身份操作符 判断两个常量或变量是否指向一个类的完全相同的实例。
=== // 是 !== //不是 == // 相等,值的相等 != // 不相等,值的不相等
在Swift中,许多基本数据类型(如String,Array和Dictionary)被实现为结构体,也就是说他们赋值的时候都是copy , This behavior is different from Foundation:NSString,NSArray, andNSDictionaryare implemented as classes, not structures. 在OC中不一样了。