博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swift:入门知识之函数与闭包
阅读量:6786 次
发布时间:2019-06-26

本文共 2876 字,大约阅读时间需要 9 分钟。

1、swift中使用关键字func来声明和定义一个函数。调用函数使用它的名字加上小括号中的参数列表。

2、swift使用->方向符号分隔参数的名字和返回值类型

3、swift使用元组(tuple)来返回多个值

4、函数可以接收可变参数个数,手机到一个数组中

5、函数可以嵌套。内嵌函数可以访问其定义的所在函数的变量。使用内嵌函数组织代码,可以避免过长和过于复杂

6、函数是第一类型的,这意味着函数可以作为返回值返回

7、函数还可以作为另一个函数的参数使用

8、闭包,闭包相当于一个匿名函数(匿名函数做函数的参数),所有传函数参数的地方都可以使用闭包

 

9、有时当你调用一个函数将每个形参进行命名是非常有用的,以表明你把每个实参传递给函数的目的。此时,可以为参数设置外部形参名。 

具体举例如下:

定义一个有参数的函数,返回值为Int型函数,使用->类型来返回值

//定义一个有参数的函数func sum(a:Int,b:Int)->Int{    return a+b}//函数调用sum(10, 20) //30

使用元组来返回多个值,通过元组名.0获取第一个值,剩下的值依次可以获取

//使用元组来返回多个值的函数func getGasprices()->(Double,Double,Double){    return (1.0,2.0,3.0)}//函数调用getGasprices()   //(.0 1.0, .1 2.0, .2 3.0)

通过一个类型...的方式定义可变参数的函数,参数个数根据你调用函数时传递的参数而定

//定义可变参数的函数func sumOfArr(numbers:Int...)->Int{    var sum = 0    for temp in numbers{        sum += temp    }    return sum}//函数调用sumOfArr(2,4,6,1,7,8) //28

在函数内部嵌套定义另一个函数

//函数内部嵌套定义函数func returnFunc()->Int{    var y = 10    func add(){        y += 5    }    add()    return y}//函数调用returnFunc()    //15

可以将函数作为一个返回值返回

//从函数内部函数返回一个函数func makeIncrement()->(Int->Int){    func addOne(number: Int)->Int {        return 1 + number    }    return addOne}//接收一个返回的addOne函数var increment = makeIncrement()//调用这个返回的函数increment(7)   //8

函数可以作为参数使用

//函数做参数使用func search(Array:[Int],Condition:Int->Bool)->Bool{    for num in Array{       if Condition(num){          return true       }    }    return false}func equalTen(num:Int)->Bool{    return num == 10}var arr:[Int] = [23,15,7,9,10] //将equalTen函数作为search函数的参数search(arr, equalTen)            //true

闭包的使用,其实闭包就是一个匿名的函数,它被当做参数传递给函数,类似Objective-C中的block函数

//闭包,闭包相当于一个匿名函数(匿名函数做函数的参数)//所有传函数参数的地方都可以使用闭包//实例一:number.map({...})是系统定义好的一个闭包函数var numbers = [2,4,5,1,6]numbers.map({(number:Int)->Int in         return number * number})//实例二:自定义的一个闭包函数func search2(arr:[Int],Condition:(Int)->Bool)->Bool{    for num in arr{       if Condition(num){          return true       }    }    return false}var arr2 = [3,5,6,9,2]search(arr2, {(number:Int)->Bool in    return number == 6})

参数外部名的使用:

 

兴趣来了,给大家分享一个超前的知识,使用swift创建一个按钮蛮好玩的

//创建按钮var button:UIButton = UIButton(    frame: CGRectMake(0, 0, 100, 100))button.backgroundColor = UIColor.redColor()button.setTitle("open", forState:UIControlState.Normal)

截图:

 

 

 

函数形参名知识拓展:有时给参数设置一个外部名,在调用函数时可以明确知道所传参数的意思.避免含糊不清....

普通的参数名格式:

外部形参名格式:

 

使用外部形参名有很大的好处,可以很明确的表达函数的意思,避免含糊不清。例如:

//调用这个函数时,所传的意思比较模糊:

//给它设置一个外部名,传参数时意思就一目了然了。

 

外部参数名称速记

如果你想为一个函数提供一个外部形参名,然而本地形参名已经使用了一个合适的名称了,那你就不需要两次书写该形参的名称。相反,你可以写一次名字,并用一个hash符号(#)作为名称的前缀。这就告诉Swift使用名称相同的本地行参名称和外部形参名称。

 

默认形参值

你可以为任何形参定义默认值以作为函数定义的一部分。如果已经定义了默认值,那么调用函数时就可以省略该行参。

注意:请在函数形参列表的末尾放置带默认值的形参。这将确保所有函数调用都使用顺序相同的无默认值实参,并让在每种情况下清晰地调用相同的函数。

有默认值的外部形参名

在大多数情况下,为所有形参提供一个带默认值的外部名是非常有用的(因此要求)。如果在调用函数的时候提供了一个值,那么这将确保形参对应的实参有着明确的目的。

为了使这个过程更容易,当你自己没有提供外部名称时,Swift将为你定义的任何默认形参提供一个自动外部名。这个自动外部名和本地名一样,就像你已经在本地名前添加了hash符号(#)一样。

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
分类:
 
 
本文转自当天真遇到现实博客园博客,原文链接: ,如需转载请自行联系原作者
你可能感兴趣的文章
OpenGL学习之glBindTexture函数
查看>>
Struts2 | 在struts2值栈中存储数据的三种方式
查看>>
ubuntu的python开发环境准备
查看>>
Java_07_01 正则表达式
查看>>
为微信域名而生的猴子数据 api接口
查看>>
在IDEA中Spring boot配置热部署无效问题解决方式
查看>>
很幽默的讲解六种Socket I/O模型
查看>>
《Objective-c基础教程》 学习计划(第一遍)
查看>>
struts2基本流程
查看>>
Android学习--01-架构
查看>>
NFS网络文件系统
查看>>
java: SQLite使用实例
查看>>
Java手动序列化和反序列化的实现
查看>>
一次解决你的所以省略号问题,不仅仅是:text-overflow:ellipsis
查看>>
sql报错信息
查看>>
k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)
查看>>
使用CFileFind类查找文件并获取文件图标
查看>>
我的友情链接
查看>>
VMware Workstation8虚拟机XP安装图解
查看>>
企业VLAN配置实例
查看>>