// 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)
}
}