iOS swift学习之入门详解(函数)

来源:互联网 发布:office办公软件绿色版 编辑:程序博客网 时间:2024/05/16 04:41

函数看一个函数的例子: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)11可以看到从第二个参数开始,需要带参数名。函数要通过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})


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 棉质的衣服褪色怎么办 黑裤子晒掉色了怎么办 新买的衣服褪色怎么办 衣服洗了掉毛怎么办 衣服受潮长了斑点怎么办 黑色的衣服粘毛怎么办 黑衣服容易粘毛怎么办 衣服上粘了毛毛怎么办 黑衣服防止粘毛怎么办 洗黑色衣服掉毛怎么办 兔毛的衣服掉毛怎么办 带绒的衣服掉毛怎么办 黑裤子被84掉色怎么办 买的衣服掉毛怎么办 裤子穿久了泛亮怎么办 新买的裤子褪色怎么办 黑裤子掉毛严重怎么办 黑裤子洗完发白怎么办 新买羊绒衫掉毛怎么办 皮草毛卷起来了怎么办 小孩衣服洗不干净怎么办 衣服沾上钢笔水怎么办 羊绒衫洗了掉毛怎么办 白衬衫弄上墨水怎么办 羊毛衬衫洗错了怎么办 婚纱照拍的太丑怎么办 微信加人没反应怎么办 新买的毛毯有味怎么办 科二第一次练车怎么办 毛呢大衣起球了怎么办 毛呢衣服起球了怎么办 羊毛呢外套起球怎么办 毛呢外套起球了怎么办 呢子外套起球了怎么办 子持白莲徒长后怎么办 佛珠多肉干瘪了怎么办 多肉植物长高了怎么办 多肉植物长虫了怎么办 织锦多肉长高了怎么办 磨砂鞋用水洗过怎么办? 牛不反刍不排便怎么办