Swift基础学习2(函数和闭包)

函数

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
})

你可能感兴趣的:(Swift基础学习2(函数和闭包))