码迷,mamicode.com
首页 > 编程语言 > 详细

swift 之 函数

时间:2015-10-24 10:05:51      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

swift的函数跟脚本语言有很多神似之处。 如果有一天用swift开发服务器 ,很期待哇(一切皆有可能,毕竟人家说要跑在Linux上),??

从参数个数来看

  1. 无参数

     func myFunc()->Int{
    
     }

     

  2. 单参数

     func myFunc(first:Int)->Int{
    
     }

     

  3. 多参数

    func myFunc(first:Int, other:Int)->Int{
    
     }     

     

从返回值来看

  1. 无返回值

     func myFunc(){
     }

     

  2. 单个返回值

     func myFunc()->Bool{
     }

     

  3. 多值返回

     func myFunc()->(min:Int, max:Int)

     

    元组的成员不需要在函数中返回时命名,因为它们的名字已经在函数返回类型中有了定义

    var ret = myFunc()
     print("min:\(ret.min), max:\(ret.max)")

     

从参数名称来看

函数参数都有一个外部参数名(external parameter name)和一个本地参数名(local parameter name)。

第一个参数省略其外部参数名,第二个以后的参数使用其本地参数名作为自己的外部参数名。所有参数需要有不同的本地参数名,但可以共享相同的外部参数名

func myFunc(first:Int, first A:Int, first B:Int){
}
// 但是这么写外部参数名真的好么?
myFunc(12, first: 1, first: 3);

 

使用外部函数名可以使得函数可以用一句话表达清楚,并且使得函数体内部可读,能表达出函数的明确意图。

 

忽略外部参数名

如果如下:

func myFunc( first:Int,  A:Int)->Int{

     return 10
}
myFunc(12, A: 1) // 这样A,B 也是外部参数名 

 

那么如何实现 直接调用myFunc(12,1)这样的函数调用呢?

func myFunc(first:Int, _ A:Int)->Int{

     return 10
}
myFunc(12,1) // OK

 

默认参数

func myFunc(parameter: Int = 12)->Int{
    return  parameter
}

myFunc()  // 

 

将带有默认值的参数放在函数参数列表的最后。这样可以保证在函数调用时,非默认参数的顺序是一致的,同时使得相同的函数在不同情况下调用时显得更为清晰。

 

可变参数

可变参数可以接受0个或者多个值

func myFunc(par:Double ...)->Double{

    var total:Double = 0

    for number in par {
        total += number
    }
    return total
}

myFunc(1,2,3,4,5)
myFunc(1,5,8.9)

 

一个函数最多只能有一个可变参数 如果函数有一个或多个带默认值的参数,而且还有一个可变参数,那么把可变参数放在参数表的最后

func myFunc(a:Double = 10, par:Double ...   )->Double{

    var total:Double = a

    for number in par {
     total += number
    }
    return total
}

myFunc(par: 1,2,3,4) // 20
myFunc(14, par: 1,2,3,4) // 24

 

变量参数

就是在函数体内可以改变这个参数的值,默认我们都知道 参数值是个let

var str = "Hello, playground"
func myFunc(var str:String)-> String{
    str = "@"+str
    return str
}
myFunc(str)

 

对变量参数所进行的修改在函数调用结束后便消失了,并且对于函数体外是不可见的。变量参数仅仅存在于函数调用的生命周期中。

 

输入输出参数

上面的可变参数仅仅是对函数体内可变,但如何使得一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在。那么就有了 In-Out 参数,这个有点像C++的引用。

你只能将变量作为输入输出参数。你不能传入常量或者字面量(literal value),因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数前加&符,表示这个值可以被函数修改。

输入输出参数不能有默认值,而且可变参数不能用 inout 标记。如果你用 inout 标记一个参数,这个参数不能被 var 或者 let 标记。

func swap(inout a:Int, inout _ b:Int){
    let tmp = a
    a = b
    b = tmp
}
var a = 3      // not let a = 3
var b = 107
//swap(3, 107) error
swap(&a, &b)


函数类型(Function Types)
()->Void

(Int, Int)->(Int, Int)

//...

函数类型的使用跟普通类型的使用方法相同,可作为参数类型,也可以是返回类型

 

函数可以嵌套

func myFunc(a: Int, b:Int)->(Int)->Int{

    func addAB(a:Int, _ b:Int)->Int{
        return a + b;
    }

    func retFunc(a:Int)->Int{
        return addAB(a , b) * b
    }

    return retFunc
}

(myFunc(3, b: 4))(3)

对于函数,也许还有些其他的东西,比如自定义操作符,重载,还有泛型,还有一块函数式编程(我之前的文章也有相关介绍,对于这块我还是相当感兴趣的)。这类的知识我会慢慢补上的,哈哈,大家一起学习,有问题的地方请帮我指出。

swift 之 函数

标签:

原文地址:http://www.cnblogs.com/Ohero/p/4906258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!