讓不懂程式設計的人愛上iPhone開發系列2 iOS12+Swift4.2版-Checklists-06
說明 :
本系列教程改編自raywenderlich.com中的iOS Apprentice系列,有需要的童鞋請移步到這裡購買英文版原教程: https:// store.raywenderlich.com /products/ios-apprentice
歡迎繼續我們的學習。
在這一課的內容中,我們將對上一課的程式碼進行進一步的學習,讓大家有更加深入的認識。
前方高能預警,這一部分的內容會涉及到一些名詞和理論,請大家抓好安全帶不要被拋離:earth_asia:了~
Method signatures(方法簽名)
在上一課的內容中,細心的童鞋可能注意到了我們對方法名的特殊記法,也就是tableView(_:numberOfRowsInSection:) ,或是 tableView(_:cellForRowAt:)
這就是所謂的“方法簽名”,通過這種方式,我們無需寫下帶有引數名稱的完整方法名,就可以輕鬆識別某個方法。
方法簽名使用冒號分隔出每個引數的位置(以及名稱)。
以tableView(_:numberOfRowsInSection:) 為例,在第一個引數的前面有一個下劃線,它的意思是當我們呼叫該方法的時候,不需要指定引數名。
可能聽到這裡你已經有點糊塗了,不過Don’t panic,不要恐慌~
我們先繼續往下看,後面會再次提到這一點的。
如果你不確定某個方法的簽名是怎樣的,那麼可以通過Xcode的Jump bar來檢視。只需要點選檔案路徑的最後一項,就可以看到當前原始檔所對應的方法和屬性列表。

需要注意的是,在上面的例子中,tableView並不是方法名,真正的方法名是tableView加上引數列表,比如tableView(_:numberOfRowsInSection:) 和 tableView(_:cellForRowAt:)
只有使用完整的方法簽名才能區分開這些方法。
特殊註釋
在上一課的程式碼中我們用到了一行比較特殊的註釋:
// MARK:- Table View Data Source
首先大家都能看出來這是一行註釋,但它又不僅僅是一行普通的註釋。在這行註釋的前面有一個關鍵詞MARK,它是一個特殊的標記。
那麼問題來了, 什麼是標記?
標記的作用是幫助我們在原始碼中通過Xcode的Jump Bar快速找到某一塊程式碼(比如跟表檢視資料來源相關的方法)。
注意看下面的截圖:

你會看到在方法列表的中間有一條分割線。而且在分割線之下有一行加粗的文字,是不是看起來很熟悉?
我們在MARK:關鍵詞之後所新增的文字會決定在Xcode Jump Bar中的顯示。比如我們在這裡添加了一個-號,就會看到後面的文字顯示在Jump Bar中。
那麼如果不新增-號會怎樣?
大家可以試著修改一下注釋行,可以看到,區別就在於現在Jump Bar裡面看不到分割線了。

如果在MARK:的後面既不新增-號,也不新增說明文字,會怎麼樣呢?試試看~
可以看到,在Jump Bar的對應部分就只有一個圖示了。

需要注意的是,在我們的Swift原始碼檔案中,除了新增MARK:這種特殊註釋,還可以新增TODO:和FIXME:。
TODO:的作用是提醒我們程式碼還需要完善,而FIXME:則用來將相關程式碼標記,以便重新或修復bug。
大家可以嘗試著使用這兩種特殊的註釋。
通過使用這幾種標記,可以高效組織我們的程式碼。特別是當原始碼檔案很長的時候,可以通過特殊註釋標記快速找到所需要的程式碼。
強烈安利大家使用。
小技巧:
在繼續學習新的知識之前,讓我們再來了解一個小技巧。
在上一課的內容中,我們添加了兩個全新的帶有多個引數的方法。問題來了,之前從來接觸過這些方法,感覺根本看不懂,而且也不知道里面引數代表什麼意思。怎麼破?
在接觸新知識的時候,沒有人是生而知之的,這個時候我們需要查閱官方的文件。
比如我們想了解dequeueResuableCell代表什麼意思,那麼只需要按住option鍵,然後點選dequeueResuableCell,就會彈出一個提示框,

如果點選Show Quick Help,就可以看到Xcode在當前頁面對該方法做了詳細的解釋和說明。

此時也可以點選Jump to Definition,就可以跳轉到一個新的檔案,其中有相關方法的定義。

感興趣的童鞋可以試著把跟表檢視資料來源相關的兩個方法的作用和定義仔細閱讀一遍。
讓我們總結一下在tableView(_:cellForRowAt:) 方法中建立cell的最簡單方式:
1.在storyboard的表檢視中新增一個prototype cell
2.在prototype cell中設定一個reuse identifier
3.呼叫tableView.dequeueReusableCell(withIdentifier:for:) ,這樣就可以建立prototype cell的全新拷貝,或是回收一個不再使用的已有cell。
當我們有了cell後,就可以考慮從對應的行獲取資料,並將其返回到表檢視。而這就是下一節我們要學習的內容了。
好了,本課的內容就到這裡了,讓我們稍事休息,準備學習下一課的內容~
答疑說明:
1.為了方便大家對課程中的問題提問,建立了一個問答社群。大家後續有開發相關的問題請到課程答疑專區提問 http:// icode.fun/ask/forum.php
2.請大家在提問之前建議先看一下這個帖子: http:// icode.fun/ask/forum.php? mod=viewthread&tid=5&extra=page%3D1
聯絡方式:
QQ討論群:375143733
個人微信: iseedo
公眾號:icodefun
福利時刻~