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基础部分学习完的,不巧的是,后台来和我讨论用户评价的接口,讨论过后,商讨出一种可行的方案,十几分钟时间过去了,我拿到将接口介入到已经完成的页面中,完美,终于 ...
随机推荐
- mui开发webapp(1)
mui开发注意事项 Mui HTML5开发框架 mui是一个高性能的HTML5开发框架,从UI到效率,都在极力追求原生体验:这个框架自身有一些规则,刚接触的同学不很熟悉,特总结本文:想了解mui更详细 ...
- 修改Input中Placeholder默认提示颜色(兼容)
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder { color: #f00; } input:-moz-pl ...
- android listview和button,ImageButton等有事件的控件的总结
public ImageButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defSty ...
- ffmpeg 命令
1.保存文件: ffmpeg -i rtsp://admin:12345@172.29.61.108/Streaming/Channels/1 -vcodec copy -acodec libvo_a ...
- git学习,什么是git?
什么是 Git? 百度百科显示,Git是 Linux 之父 Linus Trovalds,为管理 Linux 内核代码而建立的,被认为是分布式版本控制工具中的顶级水准.智能.友好.强健.高效. 正如所 ...
- 读书笔记:<世界是数字的>
世界是数字的?第一次听到这个名词不由的感到惊讶,我有听过地球是海洋的,那世界不应该是人类共同拥有的吗或者也可以说世界是大自然的?为什么世界偏偏是数字的呢?我带着满心的疑问去看了那本<世界是数字的 ...
- EF异常:WebForm、Console、Winform层不引入EF报错
WebForm.Console.Winform层可以不引入EntityFramework,但必须引入EntityFramework.SqlServer,否则运行时会报错
- mingw fbx sdk /浮点数精度
接下来要做一个linux下的程序了. 下载linux version fbx sdk tar zxvf ...gz 按照安装说明 提升权限并没什么用 还是,cannot execute bin ...
- Linux --windows vs
我其实并不是很清楚我在做什么....希望做完之后可以解答....... 在看了一堆GNU, Clang, GCC, QT, MinGW, CygWin, POSIX 这些概念之后,我觉得我在做的事情就 ...
- java正则表达式解析短信模板
/** * */ package testJava.java; import java.util.HashMap; import java.util.Map; import java.util.Sca ...