物件之間的溝通方式
學習如何解決多頁面傳遞資料的問題、或是包裝Model資料中心與VC溝通的問題。
當開始拆分架構時會有很多情境:
拆分成 ViewController 和 View
拆分大 View 和 小View
拆分成 ViewController 和 Model
拆分成 ViewController 和 ViewModel / DataManager
兩個類別之間傳遞資料,解法有以下方式:
Property
單向持有還OK,例如:ViewController 擁有 View
如果兩個類別互相擁有,則比較不建議,例如:父VC和子VC互相擁有
缺點:兩個類別互相耦合,不符合物件導向設計原則和MVC設計
缺點:兩物件互相擁有,沒有使用 weak,會發生 RetainCycle
Static 物件或是 Singleton 模式
此資料必須確定是有唯一性才可以使用,不然請少用此模式
缺點:專案全部物件都能存取,安全性不足
缺點:同時存取相同資料時,可能會有多執行緒的問題
可能適用的時機
會員資料的運用
Delegate
推薦使用!!(UIKit中大量使用)
可能適用的時機
到設定頁面,選取設定後,改變前一個頁面樣式為所選設定
Closure
推薦使用!!(URLSession中使用)
可能適用的時機
在 vc 利用 model 打 api ,api 回來後,傳回 vc 更改畫面更改為api所獲得資料,
KVO(官方說明文件)
監聽某個數值的改變,視情況使用
Notifications Center
缺點:資料流很難控制,發動時機不確定,任何地點和時間都可以呼叫,真的有需求才使用
可能適用的情境
常用案例:觀察鍵盤顯示或消失事件
兩個 vc 之間傳遞資料
Last updated
Was this helpful?