swift:入门知识之函数与闭包
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:入门知识之函数与闭包的更多相关文章
- Swift中文教程(四)--函数与闭包
原文:Swift中文教程(四)--函数与闭包 Function 函数 Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用.使用->来区分参数名和返回值的类型: fu ...
- swift 学习(二)基础知识 (函数,闭包,ARC,柯里化,反射)
函数 func x(a:Int, b:Int) {} func x(a:Int, b:Int) -> Void {} func x(a:Int, b:Int) ->(Int,Int ...
- swift学习笔记2——函数、闭包
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- C/C++编程笔记:C++入门知识丨函数和函数模板
本篇要学习的内容和知识结构概览 函数的参数及其传递方式 1. 函数参数传递方式 传值: 传变量值: 将实参内存中的内容拷贝一份给形参, 两者是不同的两块内存 传地址值: 将实参所对应的内存空间的地址值 ...
- Swift入门篇-闭包和函数
今天主要是给大家分享的是 swift中闭包的用法,我个人觉得闭包就是函数的简写方法,如果您函数不是很熟悉请查阅 swift入门篇-函数 1:函数类型 函数类型 var 变量 :(类型)->返回值 ...
- Swift 1.1语言第7章 函数和闭包
Swift 1.1语言第7章 函数和闭包 在编程中,随着处理问题的越来越复杂.代码量飞速添加. 当中,大量的代码往往相互反复或者近似反复.假设不採有效方式加以解决.代码将非常难维护. 为了解决问题, ...
- 窥探Swift之函数与闭包的应用实例
今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的.说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特性以及Swift中的闭包.今天的一些小实 ...
- swift基础:第五部分:函数与闭包(补充)
由于时间关系,我就不打算再聊天了,直接进入正题吧. 在OC中,匿名函数就是block,也称为代码块,那么在swift中,匿名函数我们称之为“闭包”.函数实际上是一种特殊的闭包,你可以使用{}来创建一个 ...
- swift基础:第二部分:函数和闭包
今天本来想利用上午的时间本来打算将swift基础部分学习完的,不巧的是,后台来和我讨论用户评价的接口,讨论过后,商讨出一种可行的方案,十几分钟时间过去了,我拿到将接口介入到已经完成的页面中,完美,终于 ...
随机推荐
- c语言编写的日历
输入年份如2013,显示2013年的日历. 思路: 1.查找每个月1号是星期几(这里利用了1990年1月1号是星期一) 计算年份如2013年1月1号到1990年1月1号有Days天,Day%7得到星期 ...
- SQL Server Reporting Services – Insufficient Rights Error
http://www.sql-server-performance.com/2011/security-ssrs-reporting-error/ SQL Server Reporting Servi ...
- Ubuntu14.04搭建LAMP环境
安装Apache2 sudo apt-get install apache2 ...
- NABC的特点分析
题目: 请把采用卡片分类的方法讨论你们的团队开发项目特点,再按照 NABC 的框架分析每个特点. 每一个组员针对其中的一个特点将NABC的分析结果发表博 ...
- JIRA安装过程中链接mysql的问题!
测试下我使用的是mysql7.5的版本,JIRA是6.3.6!这是版本引起的问题! 服务器上原生的mysql驱动jar包:Mysql-connector-java-5.1.18-bin 可参考:htt ...
- using详解(C#)
using肯定所有人都用过,最简单的就是使用using引入命名空间,然后就是引入别名,简化输入,本文主要介绍第三种用法,即用using强制对象清理资源. 先看下面这段代码: try { using ( ...
- android讯飞语音开发常遇到的问题
场景:android项目中共使用了3个语音组件:在线语音听写.离线语音合成.离线语音识别 11208:遇到这个错误,授权应用失败,先检查装机量(3台测试权限),以及appid的申请时间(35天期限), ...
- 联想电脑win7旗舰版环境下的如何成功配置AppServ
联想电脑win7旗舰版环境下的如何成功配置AppServ 毕业设计中需要用Mysql数据库,并且想找一个方便Mysql数据库编程的开发工具,百度搜索了一下,AppServ集成环境安装包能快速搭建环境. ...
- python 实现斐波那契数列
def fib(n): a,b=0,1 while a<n: print(a,end=" ") a,b=b,a+b print() fib(2000) 输出: 0 1 1 2 ...
- 老陈 WPF
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...