函数

看一个函数的样例:

func addNumbers( let a:Int,let b:Int)->Int{return a+b;
}

实现两个数相加。函数必须以func开头,后面是函数名。小括号中是參数。箭头后面是返回类型。Swift中没有int之类的基本类型了。连表示数字都用类:Int。

由于參数没有在函数内改变值,所以參数定义成常量。

不论是类的方法或全局函数,语法一样。

不像ObjC那样,全局函数是C语法。类方法是ObjC语法。

这样调用它:

let r = addNumbers(3, b: 4)

能够看到从第二个參数開始,须要带參数名。

函数要通过return返回多个值在ObjC中是做不到的,当然你能够放到一个数组或字典中把这个数组或字典返回。返回后再取出来也比較麻烦。

假设你写的函数是给别人用的话,还要凝视说明确,里面的各项数据是怎样排列的。

但如今语法已经支持了:用元组!

以下这个样例是取得两个数相除的商和余数:

func divNumbers(a:Int,b:Int)->(shang:Int,yu:Int){return (shang:a/b,yu:a%b)
}

箭头后是返回值类型,看起来像參数,实际上就是定一了一个元组类型。

return时。定义了一个元组对象,填入了两个数据的值。

调用此函数:

let ret = divNumbers(7, b: 3)
print(ret)
print(ret.shang)

可变參数

函数也支持可变參数,以下是一个计算平均值的样例:

func average(numbers:Int...)->Float{var he=0for num in numbers {he += num}return Float(he)/Float(numbers.count)
}

能够看到可变參数在函数内实际上是一个数组。

嵌套定义

函数还能够嵌套定义。就是在一个函数体内定义还有一个函数,而且内部的函数能够任意使用所在函数的暂时变量。反过来就不行。如:

func test(){var a=0;//定义内部函数func add(){a+=100 //直接操作外部变量}//调用内部函数add()print(a)
}

函数做返回值

//返回值类型是一个函数,其參数是整型,返回是整型

func testReturn()->((Int)->Int){//定义要返回的函数func action(a:Int)->Int{return a*a}//返回这个函数对象return action
}
let retFunc = testReturn()
//定义返回的函数
let bb = retFunc(22)

这事并没有什么特殊的,在C语言时代就能够啊。

函数做參数

比方数组排序函数中,比較两个相邻元素的代码能够放到函数中。比較函数做为參数传入,样例:

//比較函数
func compare(arr:[Int],firstIndex:Int,secondIndex:Int)->Bool{if(arr[firstIndex]>arr[secondIndex]) {return true}return false
}
//冒泡排序
func sort(var arr:[Int],compareFunc:([Int],Int,Int)->Bool){//请大家自行写出冒泡排序代码。。。

for(var i=arr.count-1;i>0;i--){ for(var j=0;j<i;j++){ //这里是比較的代码 if(compareFunc(arr,j,j+1)){ let tmp = arr[j] arr[j]=arr[j+1] arr[j+1]=tmp } } } } var arr = [100,33,22,4353,67,6865,43,454] sort(arr,compareFunc: compare)

闭包

闭包跟嵌套函数实质没区别,能够直接用所在函数体的变量,唯一的区别就是名字。

用闭包实现比較函数:

sort(arr,compareFunc: {(arr:[Int],firstIndex:Int,secondIndex:Int)->Bool inif(arr[firstIndex]>arr[secondIndex]) {return true}return false
})

闭包的写法能够更简:

sort(arr,compareFunc: {if($0[$1]>$0[$2]) {return true}return false
})

能够看到省掉了函数类型说明,參数直接用序号来操作。

上一篇:Swift高速入门之分支与循环

转载于:https://www.cnblogs.com/brucemengbm/p/7346308.html

Swift高速入门之函数相关推荐

  1. Swift语言高速入门

    Swift语言高速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

  2. Swift 1.1语言函数参数的特殊情况本地参数名外部参数名

    Swift 1.1语言函数参数的特殊情况本地参数名外部参数名 7.4  函数参数的特殊情况 声明定义有参函数时,为函数的每一个参数都定义了参数名称.根据参数名定义的形式不同,函数参数包括本地参数和外部 ...

  3. python3.7.4-Python3.7.4入门-3函数

    3 函数 3.1 定义函数 def fib(n): # write Fibonacci series up to n """Print a Fibonacci serie ...

  4. Swift快速入门(一)第一个Swift程序

    1. 本系列说明  本系列只是一个Swift快速入门的教程,并没有详尽的介绍Swift,Swift也并不是一个简单的编程语言,所以要想详尽的系统的学习Swift,本系列并不适合你,此系列只是让开发者可 ...

  5. C语言速看,C语言高速入门系列(二)

    C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...

  6. 苹果Swift编程语言入门教程【中文版】

    Swift代码语言教程:在刚刚过去的WWDC2014大会上,苹果公司新发布了一种编程语言Swift.据悉,Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题,对于广 ...

  7. Swift基础入门知识学习(12)-枚举(列举)-讲给你懂

    TED演讲的8个秘诀:学习18分钟高效表达-重点笔记 Swift基础入门知识学习(11-2)-閉包-第二篇-讲给你懂 目录 枚举(列举)语法 使用 Switch 语句匹配枚举(列举)值 相关值 原始值 ...

  8. PyQt5高速入门(图像处理界面),期末作业好帮手(上)

    本教程仅适用于PyQt5零基础入门选手应付作业使用,不包含任何原理及扩展,核心为糊弄学大师的养成.下面将基于一个图像处理案例,讲述如何高速入门PyQt5. 工具准备 需要下载: 1. ​​​​​Pyt ...

  9. Windows下FFmpeg高速入门

    本系列文章导航 Windows下FFmpeg高速入门 ffmpeg參数解释 mencoder和ffmpeg參数具体解释(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进 ...

最新文章

  1. 一文学懂Java泛型,详细而全面,值得收藏~
  2. aws lambda_在AWS Lambda上运行“ Hello World”
  3. 《NS与网络模拟》第五章node示例
  4. Wince Cab Manager___cab工具
  5. 华为网络-ensp实验
  6. 西门子S7-200主机PLC可编程控制器原理及应用
  7. 马云研判当前经济形势,超震撼
  8. 2019.9.15训练总结
  9. 新版Jenkins关闭CSRF“HTTP ERROR 403 No valid crumb was included in the request“
  10. 分享几个IP获取地理位置的API接口
  11. 大龄打工程序员的出路在哪里?
  12. Java Web 学习笔记01 HTML基本用法
  13. 过河卒-蓝桥杯-动态规划
  14. 使用oracle语句实现年龄的分段统计
  15. 中国人民大学出版社2022年校招
  16. 【Java EE 学习 55】【酒店会员管理系统项目总结】
  17. Flarum从零安装教程【保姆级教程】
  18. Iverilog 源码分析 -- VPI的实现
  19. 计算机网络的物理层 基本概念
  20. java fx插入图片,javafx在tableview中添加图像

热门文章

  1. CSS的class、id、css文件名的常用命名规则
  2. MATLAB学习笔记(八)
  3. 计算机科学与技术文科可以学么,文科生成绩一般,大学可以选择计算机吗?
  4. excel取整函数_查询函数Choose、Lookup、Hlookup、Vlookup应用技巧解读
  5. 城市天际线 android,都市天际线安卓手机版
  6. Redis五大基本数据类型及其相关命令及常用用途
  7. java 拼音码_java代码将汉字转换成拼音
  8. mysql小鲸鱼_杀死一只小鲸鱼
  9. vpr文件转换flac_有什么简单方法将flac无损转换mp3
  10. 信道模型多径传播阴影衰落——无线接入与定位(2)