1.構造函數:swift
給屬性開闢內存空間 給屬性設置初始值 最終目標建立一個對象 用init構造函數 參數有可能不一樣網絡
(1)//定義屬性使用var 是咱們開發須要的閉包
var name: Stringide
//可選屬性 - 默認等於nil 能夠不須要在構造函數裏進行初始化 title屬性沒有分配內存空間 在其餘地方設置值的時候才須要分配內存空間函數
var title:String?spa
//‘override’ 重寫關鍵字 子類繼承父類 須要對父類裏面的方法進行擴展 就叫重寫 orm
//調用super init()以前 保證子類初始化完成對象
//在swift中 在當前工程 類都是全局共享的 不用導頭文件 繼承
(2)重載構造函數內存
函數名相同 參數名或者參數個數不一樣 就是重載 不只限於構造函數 包括其餘函數
//屬性名字和傳入的參數同樣 須要使用self區分
(3)重寫
//若是當前類中提供了構造函數 則默認的構造函數沒有了 由於默認的構造函數init 沒法給子類的屬性進行初始化
2.KVC
本質: 在運行時動態向對象發送 setValue:forKey:
(1)可選類型的屬性能夠不在構造函數中初始化
(2)KVC是OC特有的 age在swift不兼容 基本數據類型不能使用可選類型 要進行初始化
(3)若是子類沒有提供構造函數 則可使用父類的構造函數
3.便利構造函數
(1)‘?’ 判斷前面的可選類型的對象是否爲nil 若是爲nil 則後面的代碼不執行 直接返回nil 若是不爲nil 則執行後面的代碼 返回結果
(2)不能重寫父類裏面的便利構造函數
(3)便利父類裏面的便利函數
(4)只有便利構造函數中能使用self. init()
(5)便利構造函數能夠返回nil
(6)便利構造函數最終調用指定構造函數
4.懶加載
使用lazy關鍵字 在須要的時候 對其進行建立 並把返回的值給定義的lazy屬性
(1)可使用閉包做爲懶加載
(2)didSet 當外界設置完值以後 會直接調用didSet
(3)計算屬性能夠省略get ,不能賦值
-不能存值 只能取值
-不須要開闢內存空間 耗費cpu
-每次都會調用get方法計算
(4)存儲屬性
-能存值 能取值
-須要開闢內存空間
-耗費內存
(5) 懶加載 閉包只會執行一次 開闢內存存儲
5.閉包的循環引用
(1)析構函數 deinit{}
(2)對象銷燬後 weakSelf指向的地址爲nil
(3)unowned至關於oc中的__unsafe_unretain 對象銷燬後 指向的地址不變
6.網絡訪問
swift與OC共存時 須要橋接
(1)try! 向系統保證個人數據必定可以反序列化成功
try? 若是返回的數據不能反序列化成功 則直接返回nil