//: Playground - noun: a place where people can play
import UIKit
/*
* 本節主要內容:
* 1.延遲存儲屬性
*/
// 聲明描述閉區間的類
class ClosedRange {
// 起點和終點存儲屬性
let start: Int
let end: Int
// 描述閉區間的寬度計算型屬性
var width: Int {
return end - start + 1
}
// // 第一步: 描述閉區間的和
// var sum = 0
// 第二步: 聲明計算型屬性sum
// var sum: Int {
// var result = 0
// for index in start...end {
// result += index
// }
// return result
// }
// 第三步: 延遲存儲屬性
// 1.在大括號內獲取類的屬性, 必須加self.
// 2.在大括號後面必須加上小括號
lazy var sum: Int = {
print("Start to caculate sum value.")
var result = 0
for index in self.start...self.end {
result += index
}
return result
}() // Swift閉包(JS匿名函數; OC的Block)
init(start: Int, end: Int) {
self.start = start
self.end = end
// // 第一步:計算閉區間的和(耗時)
// for index in start...end {
// sum += index
// }
}
}
var closedRange = ClosedRange(start: 0, end: 1000321)
// 第二步優勢: sum的值不是在init構造階段計算
// 第二步缺點: 每次點語法獲取sum, 每次重新計算, 浪費資源
// 第三步優勢: 沒有在init構造階段計算, 並且只執行一次
closedRange.sum
closedRange.sum
closedRange.sum
// 樣例:
class Location {
let latitude: Double = 0.0
let longitude: Double = 0.0
// 反地理編碼: 通過經緯度獲取用戶的位置信息
// 1.耗時 + 不需要在init階段 + 計算一次
lazy var address: String? = {
// 反地理編碼
// CLGeocode
return nil
}()
}
Swift 系統學習 25 類相關 延遲存儲屬性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.