<10>懶加載和計(jì)算屬性
class ViewController: UIViewController {
//懶加載
// 1. oc里面重寫get方法
// 2. swift 使用lazy關(guān)鍵字
// 3. 特點(diǎn)是在第一次使用的時(shí)候?qū)ζ溥M(jìn)行初始化, 下次直接通過變量取值
//lazyvarget - Swift Lazy computed Property Declaration
lazy var p1: Person = {
let p = Person()
p.name = "金克斯"
return p
}()
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print(p1.name)
print(p1.nick)
print(p1.nick1)
print(p1.nick2)
}
}
<10.1>自定義Person類
class Person: NSObject {
//1.計(jì)算屬性定義: 給屬性提供get和set封裝對其他屬性的取值和存值的操作過程叫做 -> 計(jì)算屬性
//2.屬性修飾符
// - fileprivate 在外界訪問不了,但是可以在extension 訪問, extension好比oc里面的分類
// - private 只能在當(dāng)前文件使用使用, 在extension里面也不能使用
private var _name: String?
var name: String? {
get {
return _name
} set {
_name = newValue
}
}
//3.只讀計(jì)算屬性:
// - 給屬性只提供get方法,封裝其他屬性的取值操作
// - 不需要開辟內(nèi)存空間煌抒,返回的是其他屬性的內(nèi)存地址
var nick: String? {
get {
return "我叫\(zhòng)(name ?? "")"
}
}
//只讀計(jì)算屬性的簡寫方式
var nick1: String? {
return "我叫\(zhòng)(name ?? "")too"
}
//4.懶加載
lazy var nick2: String? = {
// 在閉包里面如果不做為函數(shù)的參數(shù)使用的話,默認(rèn)是逃逸的狀態(tài) -> 需要self指定屬性的所屬者
return "我叫\(zhòng)(self.name ?? "")"
}()
// 5. 懶加載 與 只讀計(jì)算屬性對比
/*
懶加載
-> 需要開辟內(nèi)存空間
-> 只需要在第一次使用的時(shí)候初始化一次
-> 耗費(fèi)內(nèi)存
計(jì)算屬性
-> 不需要開辟內(nèi)存空間,返回的是其它內(nèi)存地址
-> 每次調(diào)用都需要執(zhí)行g(shù)et方法
-> 耗費(fèi)cpu
*/
}
<11>網(wǎng)絡(luò)訪問
func loadData() {
//定義url接口
let url = URL(string: "http://www.weather.com.cn/data/sk/101010100.html")
let urlRequest = URLRequest(url: url!)
//數(shù)據(jù)請求
URLSession.shared.dataTask(with: urlRequest) { (data, _, error) in
if error != nil {
print(error)
return
}
//代碼執(zhí)行到此表示請求數(shù)據(jù)成功
if data != nil {
//[]表示默認(rèn)的枚舉值
// 嘗試反序列化是否成功,如果失敗返回nil
let dic = try? JSONSerialization.jsonObject(with: data!, options: [])
print(dic)
}
}.resume()