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基础部分学习完的,不巧的是,后台来和我讨论用户评价的接口,讨论过后,商讨出一种可行的方案,十几分钟时间过去了,我拿到将接口介入到已经完成的页面中,完美,终于 ...
随机推荐
- java静态变量、静态方法和静态代码段
先上实例 public class TestStatic { public static String staticString = "this is a static String&quo ...
- 课堂练习:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
题目 1 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 2 要求: (1) 写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12) ...
- js—对象
一.创建对象 var car = new Object(); var car = {}; 二.属性和方法 var car = { color : "red", run : func ...
- hibernate3连oracle的各种坑。。
坑一:驱动错误导致sql查询不了,升级驱动到最新版即可 2.通过构造函数封装数据时,如果报错无法实例化并且不是因为字段不对应导致的,可以试试把float改为Float之类的包装类
- input.nextLine() 问题出错!
今天在学习关于I/O的知识的时候发现了一个小问题! 代码如下 package com.paulo.testio; import java.io.File; import java.io.IOExcep ...
- CIFAR-10 Competition Winners: Interviews with Dr. Ben Graham, Phil Culliton, & Zygmunt Zając
CIFAR-10 Competition Winners: Interviews with Dr. Ben Graham, Phil Culliton, & Zygmunt Zając Dr. ...
- 8086CPU各寄存器的用途
8086 有14个16位寄存器,这14个寄存器按其用途可分为(1)通用寄存器.(2)指令指针.(3)标志寄存器和(4)段寄存器等4类. 1.通用寄存器有8个, 又可以分成2组,一组是数据寄存器(4个) ...
- Long和Date数据类型之间相互转换代码 - 调整时间推前往后,截取long型日期方法。
SimpleDateFormat DATETIME_SEC_STR = new SimpleDateFormat("yyyyMMddHHmmss"); SimpleDateForm ...
- C#&java重学笔记(面向对象)
C#部分 1.C#有一个internal关键字,指字段可以同一个程序集中访问,出了程序集不行.还有一个protected internal(没有先后之分)修饰词,指只能在同一个程序集中的子类访问 2. ...
- poj 3686
The Windy's Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 3791 Accepted: 1631 Descr ...