//: 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 类相关 延迟存储属性
猜你喜欢
转载自blog.csdn.net/clarence20170301/article/details/59108865
今日推荐
周排行