讓不懂編程的人愛上iPhone開發系列2 iOS12+Swift4.2版-Checklists-09

說明

本系列教程改編自raywenderlich.com中的iOS Apprentice系列,有需要的童鞋請移步到這裡購買英文版原教程:store.raywenderlich.com

歡迎繼續我們的學習~

在繼續學習新的知識之前,讓我們回過頭來看看代碼,希望這一次可以真的看懂,而不是總覺得好像隔了一層什麼~

理論充電-有多個參數的方法

在之前的學習中,我們只接觸過帶有單個參數的方法,或者完全沒有參數的方法。但在表視圖數據源方法中我們碰到了帶兩個參數的方法。

在兩個?法中,第?個參數都是UITableView對象(觸發這些方法的表視圖),?前?個方法的第?個參數是section 編號,後?個方法的第二個參數是所謂的indexPath。

在其它的編程語?中(?如C,C++),帶有多個參數的?法通常?下面的形式來展?:

void numberOfRowsInSection(UITableView *tableView,NSInteger section)
{
...
}

而在Swift中方法的書寫形式因為要兼容iOS框架,所以更像是它的前輩Objective-C語言。以numberOfRowsInSection:為例:

override func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
... }

以上?法的官?正式命名應該是tableView(_:numberOfRowsInSection:)

如果你大聲讀出來,就會發現這種命名方式是有意義的。該方法的作用就是獲取某個特定表視圖中某個特定section的?數量。

第一個參數是這樣的:

_ tableView: UITableView

這個參數的名稱是tableView。它的後面跟著一個冒號,以及參數類型,UITableView。

第二個參數是這樣的:

numberOfRowsInSection section: Int

這裡有兩個名稱,分別是numberOfRowsInSection和section。

當調用方法的時候我們會使用第一個名稱numberOfRowsInSection,這是一個外部參數名。在方法內部我們將使用第二個名稱section,也就是本地參數名。而該參數的類型是Int。

當我們不想使用外部參數名的時候,比如_tableView:UITableView這個參數,就可以使用_下劃線,表示我們不希望參數有外部名稱。

因為歷史的原因,很多來自Objective-C的方法的首個參數名稱都使用了_。通過這樣的方式,首個參數只有一個名稱,而其它參數則有兩個名稱。

奇怪嗎?真的很奇怪。難受嗎?真的很難受,??

如果你之前學過Objective-C,或許會習慣這樣的表達方式。但如果你學過其它的編程語言,再看這樣的代碼真心會覺得嚴重不適~

不過或許等你習慣之後,你會發現這樣的方式其實更有可讀性。

對於學過其它編程語言的童鞋,在看ChecklistViewController.swift代碼的時候,會誤以為其中包含了三個名為tableView()的方法。

然而事實不是這樣的,事實是,在Swift中,參數名稱也是方法名稱的一部分。所以這三個方法的名稱實際上是:

tableView(_:numberOfRowsInSection:)

tableView(_:cellForRowAt:)

tableView(_:didSelectRowAt:)

好了,現在大家可以說基本上看得懂Swift中的方法了。

不過等等,有兩個方法的後面還有一個非常可怕的->箭頭。如果你有幸學過C語言或者C++語言,那麼對這個->箭頭符號一定心有餘悸,這可是傳聞中讓川普童鞋畏之如虎的神器「指針」啊。當然,開個玩笑,川普童鞋很可能不懂C/C++,不過指針的威名還是令很多初學者膽寒的。

那麼在Swift方法裡面的->箭頭是幹嘛用的呢?

很簡單,它代表的是方法的返回類型。

所以,在tableView(_:numberOfRowsInSection:)這個方法中,會有-> Int在最後,代表返回一個整形變數。

而在tableView(_:cellForRowAt:)方法中,會有-> UITableViewCell在最後,代表返回一個表視圖cell對象。

當然,tableView(_:didSelectRowAt:)方法中沒有這個可怕的符號,代表它只執行操作,並不返回任何值。

看到這裡,我們或許終於可以安心的喝口水壓壓驚了~

不可否認,Swift的方法體代碼真心有點另類,但是不管怎樣,如果你已經跟隨到了這裡,相比也差不多可以看懂了。

好了,本課的內容就到這裡了。

我們下一課再見~

聯繫方式:

個人微信: iseedo

公眾號:icodefun

答疑說明:

有相關的問題請到課程答疑專區提問icode.fun/ask/forum.php

福利時間~


推薦閱讀:

TAG:iOS開發 | 蘋果公司(AppleInc.) | iPhone |