在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Swift2.0语言教程之闭包Swift2.0语言闭包闭包是自包括的函数代码块。能够在代码中被传递和使用。 Swift中的闭包与C和Objective-C中的代码块(blocks)以及其它一些编程语言中的Lambda函数比較相似。在本章中所讲的函数事实上就是特殊的闭包。本节主要解说关于闭包的基本使用。 Swift2.0语言闭包表达式闭包表达式是一种利用简洁语法构建内联(内联类似与C语言中的宏定义)闭包的方式。下面这个代码是对两个字符串的比較。
执行结果例如以下:
在此代码中,当调用函数compare()时,会将str1和str2传递到给函数在定义时的參数s1,s2中,然后进行比較。在此代码中能够看到,在compare()函数中运行了一行代码,就是推断并返回。显的此函数相当冗长。此时就能够使用闭包表达式使用代码变得更好。首先,来看一下闭包表达式(闭包函数)的语法形式。
当中,參数能够是常量、变量和输入-输出參数。但没有默认值。开发人员也能够在參数列表的最后使用可变參数。 而元组也能够作为參数和返回值。 keywordin表示闭包的參数和返回值类型定义已经完毕。闭包函数体即将開始。 1.无參形式的闭包表达式 无參形式的闭包表达式语法形式例如以下:
它定义的语法形式例如以下:
它调用的语法形式例如以下:
【演示样例7-27】下面将使用闭包表达式实现字符串"aaaa"的输出。代码例如以下:
执行结果例如以下:
2.具有參数的闭包表达式 具有參数的闭包表达式有两种形式一种是最经常使用的仅仅有一个參数的闭包表达式;一种是具有多个參数的闭包表达式。下面是对这两种具有參数的闭包表达式的具体解说。 (1)具有一个參数的闭包表达式 具有一个參数的闭包表达式的语法形式例如以下:
它定义的语法形式例如以下:
它的调用形式例如以下:
【演示样例7-28】下面将使用闭包表达式输出指定字符串。 代码例如以下:
执行结果例如以下:
(2)具有多个參数的闭包表达式 具有多个參数的闭包表达式的语法形式例如以下:
它定义的语法形式例如以下:
它的调用形式例如以下:
【演示样例7-29】使用闭包实现对两个随意数的求和计算,代码例如以下:
执行结果例如以下:
事实上闭包表达式最长用在其它的函数中。并非单独的去使用它。 【演示样例7-30】下面代码将闭包表达式作为函数的一部分,来实如今推断在数组中是否有大于500或者40的元素。代码例如以下:
在此代码中。当调用copare()函数时,会将參数array、40以及闭包表达式传递到函数定义的參数中,在copare()函数中,遍历数组中元素的时候。又会去调用闭包表达式。执行结果例如以下:
Swift2.0语言使用闭包表达式的注意事项在使用闭包表达式时须要注意下面几点(下面都是以演示样例7-30来说明的): 1.判断类型 copare()函数的第三个參数是闭包表达式,它的类型为(num:Int,value:Int)->Bool,因为Swift能够判断其參数和返回值的类型,所以->和环绕在參数周围的括号能够省略,例如以下面的代码:
2.省略return 单行表达式闭包能够通过隐藏returnkeyword来隐式返回单行表达式的结果,能够将上面的样例进行改动:
3.简写參数名 Swift为内联函数提供了參数名缩写功能,开发人员能够通过$0、$1、$2来顺序的调用闭包的參数。假设在闭包表达式中使用參数名称缩写,能够在闭包參数列表中省略对其的定义。而且相应參数名称缩写的类型会通过函数类型进行判断。inkeyword也相同能够被省略。由于此时闭包表达式全然由闭包函数体构成,将上面的样例进行改动:
4.写在一行 当闭包的函数体部分非常短时能够将其写在一行上面,例如以下面代码:
5.运算符函数 在Swift中String类型定义了关于大于号(>)的字符串实现。其作为一个函数接受两个String类型的參数并返回Bool类型的值。 而这正好与以上代码sort函数的第二个參数须要的函数类型相符合。 因此。能够简单地传递一个大于号,Swift能够自己主动判断出您想使用大于号的字符串函数实现:
在Swift 1.2中使用闭包表达式须要注意下面三点:
Swift2.0语言Trailing闭包假设开发人员须要将一个非常长的闭包表达式作为最后一个參数传递给函数,能够使用Trailing闭包。它能够增强函数的可读性。Trailing闭包的一般形式例如以下:
注意:trailing闭包是一个写在函数括号之后的闭包表达式,函数支持将其作为最后一个參数调用。 演示样例7-30中代码也能够写为Trailing闭包,代码例如以下:
Trailing闭包一般使用在当闭包非常长以至于不能在一行进行编写的代码中。 例如以下面的样例就使用了Trailing闭包,实现将 |
请发表评论