記錄學習內容。看網路上大大們的文章和影片,做些紀錄。
把這邊當作寫筆記的地方,內容可能有錯誤。
以下內容還不太懂。
How to use the Coordinator pattern in iOS
Coordinator pattern (協調員模式) 一種程式寫法 。 避免view controller 連來連去 。
Coordinator pattern 簡單來講應該就是 把
不同頁面 之間 跳轉的方法 寫到
Coordinator 這個類別 。
這樣就可以把這些程式集中在同一個地方
像是 A頁 要到 B頁
C 頁 要到 B頁
就不用A和C (UIViewController) 都要寫 一個到B的方法
只要呼叫Coordinator 類別裡 到 B的方法就可以了。
也不用在StoryBoard.swift 畫線 。
3
參考底下留言的部分
原本修改AppDelegate.swift的畫面 ,改成修改SceneDelegate.swift 。
其餘照著影片打,就完成了。錯了很多次,都是某個步驟少加。
看一下文章:
How to use the coordinator pattern in iOS apps
For larger apps, you can even create child coordinators – or subcoordinators – that let you carve off part of the navigation of your app. For example, you might control your account creation flow using one subcoordinator, and control your product subscription flow using another.
也可以很多個coordinators 。
像是: 整個app 創一個coordinators ,
然後再創很多個subCoordinators 。像是:
CreateAccountViewController ,創一個CreateAccountCoordinator ;
BuyViewController 創一個 BuyCoordinator
接著繼續看:
Advanced Coordinators in iOS
整理:
1
一開始先講 child Coordinator 。
BuyCoordinator的 parent 是 MainCoordinator。
然後BuyCoordinator有一個didFinishBuying的方法 :
表示BuyViewController 完成購物後 , 呼叫BuyCoordinator的didFinishBuying方法 ,
didFinishBuying: 去到 MainCoordinator 。
MainCoordinator : 就把BuyCoordinator 刪掉(因為購物完了,不需要
BuyCoordinator 了 )
2
接著講到 navigation back,回前頁的時候 要刪掉 child Coordinator 。
原本 BuyViewController是在 viewDidDisappear 方法裡,呼叫 didFinishBuying方法 。
didFinishBuying方法: 再去MainCoordinator刪掉BuyCoordinator。
改成別種方法:
因為上面那樣寫,還是有些麻煩。
所以改成:
make our main coordinator detect interactions with the navigation controller directly
MainCoordinator,寫一個navigationController方法
,判斷Controller 從哪裡來,再做處理。
(把東西盡量集中管理 (MainCoordinator 主要協調人) 。)
就只是 在Coordinator 處理ViewController的 值而已 。
原本是 ViewController 跟 ViewController 直接傳遞。
現在是 中間多一層Coordinator。
創建一個UITabBarController -- >
修改mainCoordinator的 start()方法 --- >
修改appDelegate的apllication方法
5
Segue (分段) 是原本的連來連去
6
然後又回到乾淨的專案,練習protocol :
First, we could use protocols instead. This is usually a better idea for larger apps, because it allows us to use different concrete implementations freely.
原本MainCoordinator有 買東西功能、創建帳戶功能 , 現在 把這兩個功能 用成 介面方式實作 ,所以 以後可以把 MainCoordinator藏住 ,直接選擇 要什麼功能 。
假設實際app有10個畫面的時候,如果連來連去
,storyboard就會變很麻煩。
之前有用android的Navigation :
Android,Navigation、Fragment
連來連去看起來有點亂。不過也可以看圖了解畫面之間的連結。
Android 好像也有Coordinator的東西 ,之前不知道 :
Coordinator Pattern in Android with Kotlin Coroutines
不過現在的 swift UI ,不太需要Coordinator的感覺 。
swift UI 畫面直接用程式刻 ,不用去改xml之類的,不用在storyBoard放10個畫面 。
View和 View之間的跳轉 需不需要集中寫 ,再想想看。