Swift高速入门之函数
函数
看一个函数的样例:
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高速入门之函数相关推荐
- Swift语言高速入门
Swift语言高速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著 ISBN 978-7-121-24328-8 201 ...
- Swift 1.1语言函数参数的特殊情况本地参数名外部参数名
Swift 1.1语言函数参数的特殊情况本地参数名外部参数名 7.4 函数参数的特殊情况 声明定义有参函数时,为函数的每一个参数都定义了参数名称.根据参数名定义的形式不同,函数参数包括本地参数和外部 ...
- python3.7.4-Python3.7.4入门-3函数
3 函数 3.1 定义函数 def fib(n): # write Fibonacci series up to n """Print a Fibonacci serie ...
- Swift快速入门(一)第一个Swift程序
1. 本系列说明 本系列只是一个Swift快速入门的教程,并没有详尽的介绍Swift,Swift也并不是一个简单的编程语言,所以要想详尽的系统的学习Swift,本系列并不适合你,此系列只是让开发者可 ...
- C语言速看,C语言高速入门系列(二)
C语言高速入门系列(二) -----转载请注明出处coder-pig 本节引言: 在前面一节中我们对C语言进行了初步的了解,学会了使用IDE进行代码的编写,编译执行! 在这一节中我们会对C语言的基本的 ...
- 苹果Swift编程语言入门教程【中文版】
Swift代码语言教程:在刚刚过去的WWDC2014大会上,苹果公司新发布了一种编程语言Swift.据悉,Swift语言继承了C语言以及Objective-C的特性,且克服了C语言的兼容性问题,对于广 ...
- Swift基础入门知识学习(12)-枚举(列举)-讲给你懂
TED演讲的8个秘诀:学习18分钟高效表达-重点笔记 Swift基础入门知识学习(11-2)-閉包-第二篇-讲给你懂 目录 枚举(列举)语法 使用 Switch 语句匹配枚举(列举)值 相关值 原始值 ...
- PyQt5高速入门(图像处理界面),期末作业好帮手(上)
本教程仅适用于PyQt5零基础入门选手应付作业使用,不包含任何原理及扩展,核心为糊弄学大师的养成.下面将基于一个图像处理案例,讲述如何高速入门PyQt5. 工具准备 需要下载: 1. Pyt ...
- Windows下FFmpeg高速入门
本系列文章导航 Windows下FFmpeg高速入门 ffmpeg參数解释 mencoder和ffmpeg參数具体解释(Java处理视频) Java 生成视频缩略图(ffmpeg) 使用ffmpeg进 ...
最新文章
- 一文学懂Java泛型,详细而全面,值得收藏~
- aws lambda_在AWS Lambda上运行“ Hello World”
- 《NS与网络模拟》第五章node示例
- Wince Cab Manager___cab工具
- 华为网络-ensp实验
- 西门子S7-200主机PLC可编程控制器原理及应用
- 马云研判当前经济形势,超震撼
- 2019.9.15训练总结
- 新版Jenkins关闭CSRF“HTTP ERROR 403 No valid crumb was included in the request“
- 分享几个IP获取地理位置的API接口
- 大龄打工程序员的出路在哪里?
- Java Web 学习笔记01 HTML基本用法
- 过河卒-蓝桥杯-动态规划
- 使用oracle语句实现年龄的分段统计
- 中国人民大学出版社2022年校招
- 【Java EE 学习 55】【酒店会员管理系统项目总结】
- Flarum从零安装教程【保姆级教程】
- Iverilog 源码分析 -- VPI的实现
- 计算机网络的物理层 基本概念
- java fx插入图片,javafx在tableview中添加图像
热门文章
- CSS的class、id、css文件名的常用命名规则
- MATLAB学习笔记(八)
- 计算机科学与技术文科可以学么,文科生成绩一般,大学可以选择计算机吗?
- excel取整函数_查询函数Choose、Lookup、Hlookup、Vlookup应用技巧解读
- 城市天际线 android,都市天际线安卓手机版
- Redis五大基本数据类型及其相关命令及常用用途
- java 拼音码_java代码将汉字转换成拼音
- mysql小鲸鱼_杀死一只小鲸鱼
- vpr文件转换flac_有什么简单方法将flac无损转换mp3
- 信道模型多径传播阴影衰落——无线接入与定位(2)