說明:
本系列教程改編自raywenderlich.com中的iOS Apprentice系列,有需要的童鞋請移步到這裡購買英文版原教程:https://store.raywenderlich.com/products/ios-apprentice
歡迎繼續我們的學習~
在繼續學習新的知識之前,讓我們回過頭來看看代碼,希望這一次可以真的看懂,而不是總覺得好像隔了一層什麼~
理論充電-有多個參數的方法
在之前的學習中,我們只接觸過帶有單個參數的方法,或者完全沒有參數的方法。但在表視圖數據源方法中我們碰到了帶兩個參數的方法。
在其它的編程語?中(?如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
第二個參數是這樣的:
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
答疑說明:
有相關的問題請到課程答疑專區提問http://icode.fun/ask/forum.php
福利時間~
TAG:iOS開發 | 蘋果公司(AppleInc.) | iPhone |