我以前做的swift筆記, 之前都是整理在onenote上, 最近想到整理出博客. 也方便自己查找, 可以當(dāng)做自己的一份文檔.
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
loadBaidu()
}
func loadBaidu() {
let p = Person(name: "老王", age: 99)
print(p?.name)
//URL 的構(gòu)造函數(shù)可以返回nil
//構(gòu)造函數(shù)就是實例化對象的
//init?(string: String)
let url = URL(string: "http://www.baidu.com/")
//發(fā)起網(wǎng)絡(luò)請求
//- 與oc的區(qū)別 閉包的所有參數(shù) 需要自己寫 oc是直接帶入
//- 如果不關(guān)心的值 可以直接 '_' 忽略
URLSession.shared.dataTask(with: url!) { (data, _, error) in
// if error != nil {
// print("網(wǎng)絡(luò)請求失敗")
// return
// }
guard let data = data else {
print("網(wǎng)絡(luò)請求失敗 \(String(describing: error))")
return
}
// 將data 轉(zhuǎn)換為String
let html = String(data: data, encoding: .utf8)
print(html)
}.resume()
}
}
import UIKit
class Person: NSObject {
var name: String?
var age: Int = 0
//便利構(gòu)造函數(shù)
/**
1遍歷構(gòu)造函數(shù)允許返回 nil
-正常的構(gòu)造函數(shù)一定會創(chuàng)建對象
*** - 判斷給定的參數(shù)時候符合條件 如果不符合條件 直接返回nil 不會創(chuàng)建對象 減少內(nèi)存開銷
2**只有** 遍歷構(gòu)造函數(shù)中使用 'self.init' 構(gòu)造當(dāng)前對象
-沒有 convenience 關(guān)鍵字的構(gòu)造函數(shù)是負(fù)責(zé)創(chuàng)建對象的 反之用來檢查條件的 本身不負(fù)責(zé)對象的創(chuàng)建
3如果要在遍歷構(gòu)造函數(shù)中使用 當(dāng)前對象的屬性 一定要在 self.init 之后
*/
/**
便利構(gòu)造函數(shù)
目的
條件判斷 只有滿足條件 才實例化條件 可以防止造成不必要的內(nèi)存開銷
簡化對象的創(chuàng)建
本身不負(fù)責(zé)屬性的創(chuàng)建和初始化構(gòu)造
特點
默認(rèn)情況下 所有的構(gòu)造方法都是指定構(gòu)造函數(shù) Designted
convenience 關(guān)鍵字修飾的構(gòu)造方法就是便利構(gòu)造函數(shù)
便利構(gòu)造函數(shù)具有以下特點:
1可以返回 nil
2只有便利構(gòu)造函數(shù)中可以調(diào)用 self.init()
3便利構(gòu)造函數(shù)不能被 重寫 或者 super
4便利構(gòu)造函數(shù)主要用于條件檢測 或者 簡化對象創(chuàng)建(分類常見控件, 內(nèi)部設(shè)置好UI控件的屬性, 如frame, color, fontsize)
*/
convenience init?(name: String, age: Int) {
// self.init()
if age > 100 {
return nil
}
//Use of 'self' in property access 'name' before self.init initializes self
// self.name = name
self.init()
//執(zhí)行到此 self 才允許被訪問 才能夠訪問到對象的屬性
self.name = name
self.age = age
}
}