1、什么是屬性
屬性是對象的性質與對象之間關系的統稱。屬性就是變量或者常量,附著到類的實例中。
2、存儲屬性
/**
存儲屬性
*/
class Car {
var priceValue = 0
}
/* 獲取實例 */
let myCar = Car()
print(myCar.priceValue)
/**
注釋: priceValue 是存儲在對象中的一個簡單值,它稱為存儲屬性。
*/
3、計算屬性
1、什么是計算屬性
要定義一個計算屬性,可以像聲明存儲屬性一樣聲明一個變量,但在后面增加大括號。在這些大括號內部,提供一個get部分,還可以提供一個set部分。
2、計算屬性的創建
class NetWorkRectangle {
var width:Double = 0.0
var height = 0.0
/* 面積*/
var area:Double {
/* 計算面積*/
get {
return width * height
}
/* 計算寬高 */
set {
width = sqrt(newValue)
height = sqrt(newValue)
}
}
}
3、計算屬性的調用
/* 創建實例*/
let rect = NetWorkRectangle()
rect.width = 100
rect.height = 200
print(rect.area)
/* 輸出:20000.0 */
rect.area = 1000
print(rect.width,rect.height)
/* 輸出: 31.6227766016838 31.6227766016838 */
4、屬性觀察器
1、什么是屬性觀察器
所謂的觀察屬性是指屬性發生變化的時候,會執行某些代碼。這個代碼可以在即將發生變化之前或者剛剛發生變化之后運行。
2、如何定義一個屬性觀察器
要創建一個屬性觀察器,需要在屬性后面添加大括號,并包含willSet 和didSet代碼塊。這些代碼塊分別獲得一個參數---willSet 在屬性值發生變化之前被調用,他將獲得一個將要設定的值,而didSet 則獲取一個舊值
3、屬性觀察器的例子
class PropertyObserver {
var number:Int = 0 {
willSet(newValue) {
print("willSet to \(newValue)")
}
didSet(oldValue){
print("oldValue fo \(oldValue) to \(self.number)")
}
}
}
/**
注釋:關于你對屬性的實際處理方式,屬性觀察器不會進行任何更改,它們只是在屬性變化前后增加附加行為。
*/
4、屬性觀察器的使用
/* 創建實例 */
var observer = PropertyObserver()
/* 給其屬性賦值,查看其變化*/
observer.number = 150
/* 輸出 :
willSet to 150
oldValue fo 0 to 150
*/
5、懶惰性屬性
1、什么是懶惰性屬性
懶惰性就是直到首次訪問時才會設定屬性。設置懶惰性的方法:為了將一個屬性定義為懶惰性,可以在它的前面放一個 lazy 的關鍵字
2、懶惰性屬性的例子
class Log{
init(id :Int) {
print(" Example class \(id) created")
}
}
class lazyExample {
var number = Log(id:110)
lazy var numberLazy = Log(id:220)
init() {
print("init lazyExample")
}
}
3、懶惰性的調用
/* 創建實例對象*/
var LazyObject = lazyExample()
/*輸出: Example class 110 created */
var ob = LazyObject.number
/*輸出:無
因為:number 對象已經創建
*/
var ob1 = LazyObject.numberLazy
/**
輸出:init lazyExample
Example class 220 created
*/