// Person.swiftswift
import UIKit閉包
class Person: NSObject {ide
// -- getter & setter 方法在 Swift 中極少用,僅供參考性能
// OC 中利用 getter 方法,編寫懶加載,而 Swift 中提供了 lazyspa
// 若是不但願暴露的方法或者屬性,都須要用 private 保護起來!3d
private var _name: String?orm
var name: String? {對象
get {get
// 返回 _成員變量 的值it
return _name;
}
set {
// 使用 _成員變量記錄新的數值
_name = newValue
}
}
var name2: String?
// -- read only 屬性,只寫 getter 方法
// Swift 中 get only 屬性
var title: String? {
get {
return "Mr " + (name ?? "")
}
}
// 只讀屬性的簡寫方法 - 若是屬性的`修飾`方法,只提供 getter,那麼 get {} 能夠省略
// 另一種叫法:`計算`型屬性
// 每一次調用的時候,都會執行 {} 中的代碼,`結果取決於其餘屬性或者緣由`
// * 每次都要計算,浪費性能 - 若是計算量很小,能夠使用
// * 不須要開闢額外的空間
var title2: String? {
return "Mr 222 - " + (name ?? "")
}
// 懶加載 - 第一次調用的時候,執行閉包,而且在 title3 中保存閉包執行結果
// 再次調用,再也不執行閉包,而是直接返回以前計算的結果!
// * 只須要計算一次
// * 須要開闢單獨的空間保存計算結果
// * 閉包的代碼,不再會被調用!
// * 若是計算量很大,須要提早準備
lazy var title3: String? = {
// 閉包:是一個提早準備好的代碼,在須要的時候執行
// 使用 self. 用於閉包在執行時,準確的綁定對象
// 閉包中的 self. 是不能省略的!
return "Mr 333 - " + (self.name ?? "")
}()
}
// ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let p = Person()
p.name = "張三"
print(p.name)
// 計算型屬性
print(p.title2)
// 懶加載
print(p.title3)
print("----")
p.name = nil
p.name = "里斯"
// 計算型屬性 -> Mr 里斯
print(p.title2)
// 懶加載 -> Mr 張三
print(p.title3)
}
}