函数

看一个函数的样例:

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=0
for 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 in
if(arr[firstIndex]>arr[secondIndex]) {
return true
}
return false
})

闭包的写法能够更简:

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

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

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

Swift高速入门之函数的更多相关文章

  1. Swift语言高速入门

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

  2. Swift语法基础入门三(函数, 闭包)

    Swift语法基础入门三(函数, 闭包) 函数: 函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标识函数做什么,并且当函数需要执行的时候,这个名字会被用于“调用”函数 格式: ...

  3. Apple Swift编程语言入门教程

    Apple Swift编程语言入门教程 作者: 日期: 布衣君子 2015.09.22 目录 1   简介 2   Swift入门 3   简单值 4   控制流 5   函数与闭包 6   对象与类 ...

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

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

  5. Swift轻松入门——基本语法介绍和详细地Demo讲解(利用WebView打开百度、新浪等网页)

    转载请务必注明出处(all copyright reserved by iOSGeek) 本文主要分为两个部分,第一部分介绍Swift的基本语法,第二部分讲解一个利用WebView来打开百度.sina ...

  6. Swift语言入门之旅

    Swift语言入门之旅  学习一门新的计算机语言,传统来说都是从编写一个在屏幕上打印"Hello world"的程序開始的.那在 Swift,我们使用一句话来实现它: printl ...

  7. Tensorflow高速入门2--实现手写数字识别

    Tensorflow高速入门2–实现手写数字识别 环境: 虚拟机ubuntun16.0.4 Tensorflow 版本号:0.12.0(仅使用cpu下) Tensorflow安装见: http://b ...

  8. C语言高速入门系列(二)

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

  9. C语言高速入门系列(八)

    C语言高速入门系列(八) C语言位运算与文件 本章引言: 在不知不觉中我们的C高速入门系列已经慢慢地接近尾声了,而在这一节中,我们会对 C语言中的位运算和文件进行解析,相信这两章对于一些人来说是陌生的 ...

随机推荐

  1. Jmeter实现对mysql的增、删、改、查

    1.          创建一个存储过程,语句如下: DELIMITER $$; DROP PROCEDURE IF EXISTS test; create PROCEDURE test() BEGI ...

  2. Tasker : Task / Shortcut Widgets

    Task / Shortcut Widgets The standard way of running a Tasker task is by attaching it to a profile wh ...

  3. PHP自学之路---雇员管理系统(1)

    前面已经介绍了Zend studio工具的使用以及软件开发的基本阶段,下面就是我们第一个练习,雇员管理系统,从设计到实现来简单介绍下: 开发环境: 服务器:基于Linux 2.618环境下配置PHP服 ...

  4. 淘宝API得到单个商品的信息,用了淘宝的SDK...

    淘宝api获取到的数据.返回结果可以选择json格式和xml格式的啊.每个api下面都有sdk调用示例哦. 详细:http://wenwen.soso.com/z/q335640192.htm 淘宝开 ...

  5. 论DELPHI跨平台中间件的策略

    论DELPH跨平台中间件的策略 1)起先DELPHI只支持WINDOWS,此时DELPHI三层开发的眼里只有WINDOWS COM. 基于WINDOWS COM的OleVariant组合拳=TData ...

  6. Selenium2+python自动化58-读取Excel数据(xlrd)

    前言 当登录的账号有多个的时候,我们一般用excel存放测试数据,本节课介绍,python读取excel方法,并保存为字典格式. 一.环境准备 1.先安装xlrd模块,打开cmd,输入pip inst ...

  7. 卡方检验(Chi-square test/Chi-Square Goodness-of-Fit Test)

    什么是卡方检验 卡方检验是一种用途很广的计数资料的假设检验方法.它属于非参数检验的范畴,主要是比较两个及两个以上样本率( 构成比)以及两个分类变量的关联性分析.其根本思想就是在于比较理论频数和实际频数 ...

  8. Objective-C:字符串的反转Reverse

    OC中字符串的反转方式可以用两种方式来处理: 第一种:从头到尾取出字符串的每一个字符,然后将其从尾到头添加到可变的字符串中,最后输出即可. 第二种:将OC内部的字符串转换为C语言中的字符串,然后动态分 ...

  9. C/C++中内联(inline)函数的优点和缺点

    优点 缺点 1. 内联函数代码被放入符号表中,在使用时进行替换,和宏展开一样,效率很高: 1. 不允许过多的代码,代码过多的话会造成大的内存消耗,最好在5行以内: 2. 编绎器在调用一个内联函数,首先 ...

  10. C# 事件(Event)

    事件(Event) 基本上说是一个用户操作,如按键.点击.鼠标移动等等,或者是一些出现,如系统生成的通知.应用程序需要在事件发生时响应事件.例如,中断.事件是用于进程间通信. 通过事件使用委托 事件在 ...