【基础】

Swift函数格式:

1.定义格式:

func   函数名(参数名1:数据类型,... ,参数名n:数据类型) -> (返回值类型1,...,返回值类型n){

///函数体内语句

}

2.调用格式:

函数名(形参列表)

函数名(形参列表). 返回值索引

例子:

func greet(name: String , day: String) -> String{
return "Hello \(name), today is \(day)."
} greet("Bob","Tuesday")

吐槽:

苹果终于把那让人恶心的函数格式改过来了,记得当初刚学obj-c的时候,那个叫难受!

不过为了保持“不落俗套”,返回值类型又被扔到最后了,苹果你在这些语法格式上要毛个性呀!难道不能跟java/C++/C#统一么?

好在调用时,回归自然了,当时看到那一个方括号套一个方括号就反胃。

3 .返回多值

从格式上可以看出,Swift和传统函数不同,允许一个函数返回多个值

返回的值可以用 函数名(形参列表). 返回值索引 来各自获取,索引从0开始,如:

func getPerson()->(String,Int16,String)
{
return("张三",16,"男")
} println(getPerson().0+"今年"+String(getPerson().1)+"岁,性别:"+getPerson().2);

4. Swift函数可以用...来获取不固定个数参数

func sumOf(numbers:Int...)->Int{
var sum=0
for number in numbers{
sum+=number
}
return sum
}
sumOf()
sumOf(2,5)
sumOf(42,597,12,55)

请注意,这个是可变参数个数,和数组参数不同,可以对比:

func sumOf(numbers:Int[])->Int{
var sum=0
for number in numbers{
sum+=number
}
return sum
}
//sumOf()
sumOf([42,597,12,55])

第二段代码用的是数组,虽然数组中项个数不固定,但参数必须是一个数组

【高级】

5.函数重载

Swift中,函数名相同、参数不同就可以重载,返回值类型和个数不影响

但注意!函数名相同、参数相同、返回值个数或类型不同不算重载,是错误,因为系统调用函数时无法区分。

6.局部函数

Swift中,允许在函数中嵌套定义局部函数,局部函数只能使用在它所定义的函数中,不能在外部使用,如:

func rf()->Int{
var y=10
func add(){
y+=5
}
add()
return y
}
rf() add() // 系统报错

7. 以函数作为函数的返回值类型

函数是first-class type(一流类型?暂时没找到这个概念),所以函数可以将其他函数作为它的返回值

例如:

//创建以函数add作为返回值的函数makeInc
func makeInc()->(Int->Int){
func add(number:Int)->Int{
return 1+number
}
return add
}
//inc获取到函数makeInc的值,所以inc就成了add
var inc=makeInc()
inc(7)

有函数指针,用这个到底有什么意义?才疏学浅,等待大牛解惑~

8. 函数作为其它函数的参数

以函数作为参数,将别的函数逻辑带入到当前函数中

func hasAnyMatches(list:Int[],condition:Int->Bool)->Bool{
for item in list{
if condition(item){
return true
}
}
return false
} func lessThanTen(number:Int)->Bool{
return number<10
} var numbers=[20,19,1,12] hasAnyMatches(numbers, lessThanTen)

感觉能用到的可能性不是很大

9. 临时/匿名 函数:{} closure

使用块{} 可以定义临时函数,其中要用到关键字“in”来分隔函数头和函数体

完整格式:

{(形参列表)-> 返回值类型列表  in

///临时函数体语句

return 返回值

}

下面的代码用到了数组的map()方法,将原数组映射为新数组

在临时函数中,写入映射规则,偶数原样不变,奇数变为0

在swift中,将这种{}结构称为“closure”

var numbers=[20,19,1,12]

numbers.map({
(number:Int)->Int in
if number%2==1{
return 0}
else{
return number}
}) //结果:[20,0,0,12]

如果在closure中,如果类型已知,还可以进一步简化写法:

numbers.map({number in 3*number})  //数组中每个元素值乘三

而且closure还可以作为最后一个函数参数,比如:

sort([1,5,3,12,2]) {$0>$1}

解释:

上面的sort函数用于排序,有两个重载,上面用的是第二个

T[] sort(array: T[], pred: (T, T) -> Bool)

closure {$0>$1}就是参数(T,T)->Bool

由于google挂了(因为万恶的XXXXXXXX!! 此处省略一万字),百度搜不到,所以这里没法对这个函数

做进一步解释,咱还没申请苹果99$的账号,也下不到xcode 6的文档,以后再补上说明吧

看意思,这里的T还有点泛型的味道

[Swift系列]003- 函数的更多相关文章

  1. Swift系列三 - 函数

    函数在任何语言中都是存在的,Swift中函数更加灵活. 一.函数的定义 1.1. 有返回值(形参默认是let,也只能是let) func pi() -> Double { return 3.14 ...

  2. 窥探Swift系列博客说明及其Swift版本间更新

    Swift到目前为止仍在更新,每次更新都会推陈出新,一些Swift旧版本中的东西在新Swift中并不适用,而且新版本的Swift会添加新的功能.到目前为止,Swift为2.1版本.去年翻译的Swift ...

  3. swift入门篇-函数

    今天给大家介绍 swift函数,swift函数和c#,js的写法大致一直,但是与object-c写法有很大不同点.废话不多说,直接开始了. 1:函数  --常量参数 func 函数名( 参数变量:类型 ...

  4. Swift 中的函数(下)

    学习来自<极客学院:Swift中的函数> 工具:Xcode6.4 直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会 import Foundation /******** ...

  5. Swift 中的函数

    学习来自<极客学院:Swift中的函数> 工具:Xcode6.4 直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会 练习一: import Foundation //函数 ...

  6. 李洪强iOS开发Swift篇—08_函数(2)

    李洪强iOS开发Swift篇—08_函数(2) 一.函数类型 函数类型也是数据类型的一种,它由形参类型和返回值类型组成,格式是 (形参类型列表) -> 返回值类型 1 func sum(num1 ...

  7. 李洪强iOS开发Swift篇—07_函数

    李洪强iOS开发Swift篇—07_函数 一.函数的定义 (1)函数的定义格式 1 func 函数名(形参列表) -> 返回值类型 { 2 // 函数体... 3 4 } (2)形参列表的格式 ...

  8. Swift学习笔记 - 函数与闭包

    import Foundation //1.函数的定义与调用//以 func 作为前缀,返回箭头 -> 表示函数的返回类型func sayHello(name: String) -> St ...

  9. Swift学习之函数和简单地控件的创建

     今天还是重复昨天做的事情--敲代码,但唯一的不同就是所学的知识不同了,我们又进一步往深得层次学习了,感觉越来越有意思了,虽然临近结束了看着大家积极性越来越低了,但是我知道我不能这样,我要比别人付出的 ...

随机推荐

  1. BZOJ2435: [Noi2011]道路修建

    这种水题真是……没一次AC都不好意思见人啊 P.S. LINUX无限栈真是爽炸了… 我爱递归 /**************************************************** ...

  2. ZOJ 2971 Give Me the Number;ZOJ 2311 Inglish-Number Translator (字符处理,防空行,strstr)

    ZOJ 2971 Give Me the Number 题目 ZOJ 2311 Inglish-Number Translator 题目 //两者题目差不多,细节有点点不一样,因为不是一起做的,所以处 ...

  3. jvm 之 国际酒店 6月25日上线内存溢出原因

    6月25日OMS,Ihotel上线成功后执行了一个批处理,SOA报警提示某一台IHOTEL机器调用OMS失败率大于阀值,登录这个机器后发现这台机器CPU使用率处于80%以上,调用OMS有的时候超过5秒 ...

  4. UVA 10673 扩展欧几里得

    题意:给出x 和k,求解p和q使得等式x = p[x / k] + q [ x / k], 两个[x / k]分别为向下取整和向上取整 题解:扩展欧几里得 //meek///#include<b ...

  5. 深入理解Windows X64调试

    随着64位操作系统的普及,都开始大力进军x64,X64下的调试机制也发生了改变,与x86相比,添加了许多自己的新特性,之前学习了Windows x64的调试机制,这里本着“拿来主义”的原则与大家分享. ...

  6. shell基础(一)

    Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释 ...

  7. 应用内存优化之OnLowMemory&OnTrimMemory

    1.应用内存onLowMemory& onTrimMemory优化 onLowMemory& onTrimMemory简介:OnLowMemory是Android提供的API,在系统内 ...

  8. Grub命令行

    今天电脑无缘无故无法正常启动,只提示 GRUB> 看来是GRUB引导出问题了,要解决下. 先 想到用制作U盘启动盘来启动,参照网上的方法,很简单用USBBOOT软件做了一个U盘启动盘,按F11在 ...

  9. 五分钟轻松搞定产品需求文档!这可能史上最全PRD文档模板

    本文由  @JustWu 原创发布于社区 为什么写这篇文章? 第一:写PMCAFF的PRD文档,大家都是用户,比较好参考与理解,方便大家来找我写的不好的地方. 第二:我在自学PRD文档的编写过程中,总 ...

  10. WPF之通过EventTrigger修改模板中元素的属性

    前言:对于此操作,我只想说是微软的神经,还是我的笨蛋.为什么EventTrigger就不能像Trigger那样直接设置Property以及Value就对属性进行操作,而必须要放一个Action,而默认 ...