在继续学习新的知识之前,让我们回过头来看看代码,希望这一次可以真的看懂,而不是总觉得好像隔了一层什么~
理论充电-有多个参数的方法
在之前的学习中,我们只接触过带有单个参数的方法,或者完全没有参数的方法。但在表视图数据源方法中我们碰到了带两个参数的方法。
image在两个⽅法中,第⼀个参数都是UITableView对象(触发这些方法的表视图),⽽前⼀个方法的第⼆个参数是section 编号,后⼀个方法的第二个参数是所谓的indexPath。
在其它的编程语⾔中(⽐如C,C++),带有多个参数的⽅法通常⽤下面的形式来展⽰:
<pre class="prettyprint hljs objectivec" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; word-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">void numberOfRowsInSection(UITableView *tableView,NSInteger section)
{
...
}</pre>
而在Swift中方法的书写形式因为要兼容iOS框架,所以更像是它的前辈Objective-C语言。以numberOfRowsInSection:为例:
<pre class="prettyprint hljs swift" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; word-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">override func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
... }</pre>
以上⽅法的官⽅正式命名应该是tableView(_:numberOfRowsInSection:)
如果你大声读出来,就会发现这种命名方式是有意义的。该方法的作用就是获取某个特定表视图中某个特定section的⾏数量。
第一个参数是这样的:
_ tableView: UITableView
这个参数的名称是tableView。它的后面跟着一个冒号,以及参数类型,UITableView。
第二个参数是这样的:
numberOfRowsInSection section: Int
这里有两个名称,分别是numberOfRowsInSection和section。
当调用方法的时候我们会使用第一个名称numberOfRowsInSection,这是一个外部参数名。在方法内部我们将使用第二个名称section,也就是本地参数名。而该参数的类型是Int。
当我们不想使用外部参数名的时候,比如tableView:UITableView这个参数,就可以使用下划线,表示我们不希望参数有外部名称。
因为历史的原因,很多来自Objective-C的方法的首个参数名称都使用了_。通过这样的方式,首个参数只有一个名称,而其它参数则有两个名称。
奇怪吗?真的很奇怪。难受吗?真的很难受,:cry:
如果你之前学过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的方法体代码真心有点另类,但是不管怎样,如果你已经跟随到了这里,相比也差不多可以看懂了。
喜欢的话可以点个赞+1:或关注多多支持哦 小编会经常给小伙伴们更新关于IOS当下热点。
另外小编给大家推荐一个iOS技术交流群:458839238!群内提供数据结构与算法、底层进阶、swift、逆向、整合面试题等免费资料
附上一份收集的各大厂面试题(附答案) ! 群文件直接获取
各大厂面试题
文章来源网络 如有侵权请联系小编删除
网友评论