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

2016-06-27  本文已影响5人  PittWong

函数

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<strings.count;++i{
        if i != 0{
            result.append(seperator)
        }
        result+=strings[i]
    }
    return result
}
 
joinStr(seperator:" ", "hello","world","!") //结果:"hello world !"

默认内参数为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
})
上一篇 下一篇

猜你喜欢

热点阅读