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=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快速入门之分支与循环

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值