函数
swift中函数与C语言中函数表现形式上没有太大区别,同时内外部参数的表现形式与OC逻辑相同,微小差异 : 元组概念为swift函数提供了多返回值的便捷使用方式
内外参数分别声明
func test(num1 num:Int) -> (Int) {
return num * 100 // 内参数是num
}
var value = test(num1: 100) //调用时用外参数
普通函数表现形式---未标注内外参数时默认相同
此种形式在原来版本需要在内参数前加上# 表明内外参数名相同
//定义一个函数,注意参数和返回值,如果没有返回值可以不写返回值或者写成Void、空元组()(注意Void的本质就是空元组)
func sum(num1:Int,num2:Int)->Int{
return num1 + num2
}
let value = sum(num1: 23, num2: 42)//函数的调用
有默认值的函数
func sum(num1:Int,num2:Int = 100)->Int{
return num1 + num2
}
let value = sum(num1: 23)
let value = sum(num1: 23, num2: 42)
可变参数,一个函数最多有一个可变参数并且作为最后一个参数
下面strings参数在内部是一个[String]
,对于外部是不定个数的String
参数
func joinStr(seperator:Character=",",strings:String...)->String{
var result:String=""
for var i=0;i
默认内参数为let类型,如果需要变化需要用var
func sum(num1:Int,num2:Int = 100)->Int{
var num1 = num1 //默认内参数为let类型,如果需要变化需要用var
num1 += 1
return num1 + num2
}
inout参数 : 内部可以改变外部参数 (调用时候必须传入变量)
func inoutTest(inout num1: Int) -> () { //swift3.0之前写法
}
func inoutTest(num1:inout Int) -> () { //3.0以后写法
}
作为参数和返回值
var sum3=sum //自动推断sum3的类型:(Int,Int)->Int,注意不同的函数类型之间不能直接赋值
sum3(1,2) //结果:3
//函数作为返回值
func fn()->(Int,Int)->Int{
//下面的函数是一个嵌套函数,作用于是在fn函数内部
func minus(a:Int,b:Int)->Int{
return a-b
}
return minus;
}
var minus=fn()
//函数作为参数
func caculate(num1:Int,num2:Int,fn:(Int,Int)->Int)->Int{
return fn(num1,num2)
}
caculate(1, 2, sum) //结果:3
caculate(1,2, minus) //结果:-1
闭包
- 全局函数和嵌套函数也是一种闭包,对于全局函数它不会捕获任何常量或者变量,而对于嵌套函数则可以捕获其所在函数的常量或者变量。
- 通常我们说的闭包更多的指的是闭包表达式,也就是没有函数名称的代码块,因此也称为匿名闭包。
- 简化使用形式称之为
尾随闭包
func caculate(num1:Int,num2:Int,fn:(Int,Int)->Int)->Int{
return fn(num1,num2)
}
caculate(a, b, {(num1:Int,num2:Int)->Int in
return num1 - num2
})
//常用以下方式来使用,称之为`尾随闭包`
//再次简化,使用参数名缩写,使用$0...$n代表第n个参数,并且此in关键字也省略了
caculate(a, b, {
return $0 - $1
})