美文网首页程序员
让不懂编程的人爱上iPhone开发系列2 iOS12+Swift

让不懂编程的人爱上iPhone开发系列2 iOS12+Swift

作者: iOS开发之家 | 来源:发表于2019-03-11 20:10 被阅读5次

    在继续学习新的知识之前,让我们回过头来看看代码,希望这一次可以真的看懂,而不是总觉得好像隔了一层什么~

    理论充电-有多个参数的方法

    在之前的学习中,我们只接触过带有单个参数的方法,或者完全没有参数的方法。但在表视图数据源方法中我们碰到了带两个参数的方法。

    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、逆向、整合面试题等免费资料
    附上一份收集的各大厂面试题(附答案) ! 群文件直接获取

    各大厂面试题

    文章来源网络 如有侵权请联系小编删除

    相关文章

      网友评论

        本文标题:让不懂编程的人爱上iPhone开发系列2 iOS12+Swift

        本文链接:https://www.haomeiwen.com/subject/jtripqtx.html