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(, ) //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 =
for temp in numbers{
sum += temp
}
return sum
}
//函数调用
sumOfArr(,,,,,) //28

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

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

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

//从函数内部函数返回一个函数
func makeIncrement()->(Int->Int){
func addOne(number: Int)->Int {
return + number
}
return addOne
}
//接收一个返回的addOne函数
var increment = makeIncrement() //调用这个返回的函数
increment() //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 ==
}
var arr:[Int] = [,,,,] //将equalTen函数作为search函数的参数
search(arr, equalTen) //true

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

//闭包,闭包相当于一个匿名函数(匿名函数做函数的参数)
//所有传函数参数的地方都可以使用闭包 //实例一:number.map({...})是系统定义好的一个闭包函数
var numbers = [,,,,]
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 = [,,,,] search(arr2, {(number:Int)->Bool in
return number ==
})

参数外部名的使用:

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

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

截图:

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

普通的参数名格式:

外部形参名格式:

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

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

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

外部参数名称速记

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

默认形参值

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

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

有默认值的外部形参名

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

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

swift:入门知识之函数与闭包的更多相关文章

  1. Swift中文教程(四)--函数与闭包

    原文:Swift中文教程(四)--函数与闭包 Function 函数 Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用.使用->来区分参数名和返回值的类型: fu ...

  2. swift 学习(二)基础知识 (函数,闭包,ARC,柯里化,反射)

    函数 func x(a:Int, b:Int)  {}   func x(a:Int, b:Int) -> Void {}  func x(a:Int, b:Int) ->(Int,Int ...

  3. swift学习笔记2——函数、闭包

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  4. C/C++编程笔记:C++入门知识丨函数和函数模板

    本篇要学习的内容和知识结构概览 函数的参数及其传递方式 1. 函数参数传递方式 传值: 传变量值: 将实参内存中的内容拷贝一份给形参, 两者是不同的两块内存 传地址值: 将实参所对应的内存空间的地址值 ...

  5. Swift入门篇-闭包和函数

    今天主要是给大家分享的是 swift中闭包的用法,我个人觉得闭包就是函数的简写方法,如果您函数不是很熟悉请查阅 swift入门篇-函数 1:函数类型 函数类型 var 变量 :(类型)->返回值 ...

  6. Swift 1.1语言第7章 函数和闭包

    Swift 1.1语言第7章  函数和闭包 在编程中,随着处理问题的越来越复杂.代码量飞速添加. 当中,大量的代码往往相互反复或者近似反复.假设不採有效方式加以解决.代码将非常难维护. 为了解决问题, ...

  7. 窥探Swift之函数与闭包的应用实例

    今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小实 ...

  8. swift基础:第五部分:函数与闭包(补充)

    由于时间关系,我就不打算再聊天了,直接进入正题吧. 在OC中,匿名函数就是block,也称为代码块,那么在swift中,匿名函数我们称之为“闭包”.函数实际上是一种特殊的闭包,你可以使用{}来创建一个 ...

  9. swift基础:第二部分:函数和闭包

    今天本来想利用上午的时间本来打算将swift基础部分学习完的,不巧的是,后台来和我讨论用户评价的接口,讨论过后,商讨出一种可行的方案,十几分钟时间过去了,我拿到将接口介入到已经完成的页面中,完美,终于 ...

随机推荐

  1. IO和NIO的区别

    http://my.oschina.net/u/1010990/blog/192558 传统的socket IO中,需要为每个连接创建一个线程,当并发的连接数量非常巨大时,线程所占用的栈内存和CPU线 ...

  2. 添加swap分区

    1.创建swap文件,可以单独划分一个分区出来,也可以直接生成一个swap文件 dd if=/dev/zero of=swap bs=1M count=1024 2.格式化为swap文件 mkswap ...

  3. Java应用的优秀管理工具Maven的下载安装及配置

    1.进入Maven的官方下载地址:http://maven.apache.org/download.cgi 2.向下滚动页面,点击这个zip包进行下载: 3.将压缩包解压后剪切到Mac的某个目录下就完 ...

  4. Mac下安装及配置Eclipse

    1.安装Eclipse前先确认你的Mac上是否已安装java运行环境.进入终端,输入”java -version”,如果返回了java版本号则说明已安装,否则,请先安装java运行环境: 2.访问ec ...

  5. xml基础学习笔记05

    Xpath快速解析 如题一样,本篇主要说说Xpath快速查找XML文档   * Xpatn.Xquery,是专门用来查询xml的语言   * 查询xml非常快   Xpatn.Xquery,是专门用来 ...

  6. 行转列(FOR XML PATH)

    SELECT (SELECT ac.ColName+',' FROM T1 AS ac FOR XML PATH('')) AS ColName, (SELECT ac.colTitle+',' FR ...

  7. java中的匿名内部类

    匿名内部类在java编码中不是很常见,它可一让类实现多继承的特性(多个父类~1个子类) java中的匿名内部类总结http://www.cnblogs.com/nerxious/archive/201 ...

  8. ios 缓存策略

    NSURLRequestCachePolicy 缓存策略   1> NSURLRequestUseProtocolCachePolicy = 0, 默认的缓存策略, 如果缓存不存在,直接从服务端 ...

  9. [noip2010]关押罪犯 并查集

    第一次看的时候想到了并查集,但是不知道怎么实现: 标解,f[i]表示i所属的集合,用f[i+n]表示i所属集合的补集,实现的很巧妙,可以当成一个使用并查集的巧妙应用: #include<iost ...

  10. share干什么的

    share到底干什么的 //--------------------打开GameServer,share中加载------------------------- .加载nBodyID //玩家的nBo ...