前言
本篇主要是紀錄一些我在第一次Task中,mentor看過我寫code的方式,給予我的建議。可以回去上一章看我的小任務。
我大致上會分成幾個層面來劃分:
- 功能、區塊的劃分
- 需要補足的基本知識
正文
原本我主要編輯的區塊都是在ViewController,不過mentor給的建議是:這樣會造成Massive View Controller,也就是說,ViewController內部太多的東西,這樣在閱讀的時候要一直找來找去,對於寫code的可讀性、排版會很凌亂。
所以,依照分類,mentor大概會這麼做:
把ViewController的內容拆分出MyView、ViewController

MyView裡面裝的是影響UI畫面變化的實質內容,如元件:

下面則是元件的一些實質內容的編輯:

然後,自動佈局:

基本上,關於畫面的東西都被統包在這個內容之中。
於是,ViewController的內容被切成兩半後,剩下的則是:
屬性:

生命週期的變化,以下直接把myView的內容直接引進到view裡面,並在loadView這個方法下面覆寫

然後在下一個覆寫方法中,置入另外兩個方法:

第一個方法是導覽列的,第二個則是滑桿、輸入框的監聽事件。
以下部分則是監聽事件的實質內容:

最後,才是一個擴展,把ViewController的class擴展一個協議(Protocol):

這部分因為呼叫鍵盤的時候需要用到UITextFieldDelegate這個協議處理,所以才需要這樣呼叫。
以上大致做了一些重整的部分,接下來要敘述一下一些知識重點。
- 可以把會影響畫面的東西都放在同一個頁面Swift檔裡面
- 影響畫面的動作放在一個畫面裡
- 觸發事件放在ViewController裡面
一些知識點需要補足:
- StackView是什麼?
- Required init的功能是什麼
- didSet的寫法要練習,觀念要稍微注意一下
- MVC架構在做些什麼?
- loadView()、viewDidload()的用法實際上是什麼。
這些從Task1延伸出的知識,大概會在這幾天稍微做一些補充,接著再從Navigation、TabBar繼續往下讀。
以下,也會附上原本的程式碼,以及經過mentor code review的程式碼。
如果有興趣可以兩相比較:
Task1
https://github.com/terminal201467/SomeTasks/tree/main/Task1
Task(After Code Review)
https://github.com/terminal201467/SomeTasks/tree/main/Task1-20210719%EF%BC%88Code%20Review%EF%BC%89