https://developer.apple.com/library/prerelease/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-ID254
Swift属性即成员变量跟其它语言类似, 包含变量、常量等。
Swift提供了lazy关键字, 即实例化结构体时不实例化成员变量, 当第一次调用lazy属性时才真正的实例化。使用lazy属性的场景: 1、 实例化结构体时,不知道某个属性该赋什么值(Java里一般赋初值0或null); 2、该属性需要经过比较耗时的计算后得出(就是说某个属性不常用且初始化会比较耗时,在用的时候再去实例化)。
PS:在Java里没有跟lazy功能类似的关键字, 也没发现什么问题。
class DataImporter {
var filename = "data.txt"
}
class DataManager {
lazy var importer = DataImporter()
var data = [String]()
}
let manager = DataManager() //importer变量并没有实例化
print("\(manager.importer)") //第一次调用时实例化lazy变量
在Java里提供了getter和setter方法, Swift也实现了get和set语法。 区别是Swift的get、set方法是在声明参数时实现。
struct Point {
var x = 0.0, y = 0.0
}
struct Size {
var width = 0.0, height = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width/2)
let centerY = origin.y + (size.height/2)
return Point(x: centerX, y: centerY)
}
set(newCenter) {
origin.x = newCenter.x
origin.y = newCenter.y
}
}
}
var square = Rect(origin: Point(x:0.0, y:0.0),
size: Size(width: 10.0, height: 10.0))
let initialSquareCenter = square.center