Swift学习笔记(6)—— 函数

函数的定义方法、返回值等都跟C/JAVA有差异。

  • 外部参数名
  • 默认参数
  • 可变参数
  • 函数类型
  • 嵌套函数
    ——都是要注意的点啊,还蛮多的。

6.函数

函数定义的方法

    func sayHello(personName: String) -> String {
        let greeting = "Hello, " + personName + "!"
        return greeting
    }
  • 关键字 func * 函数名 sayHello * 参数表—— (名称: 类型) * 返回类型 -> String

无返回值函数

去除 ->和返回类型即可。(不需要类似JAVA的void关键字)

多重返回值函数:使用元组

func count(string: String) -> (vowels: Int, consonants: Int, others: Int){
    return (1,1,2)
}

外部参数名

定义函数的时候在参数表的名称前多加一名称,则第一个为外部参数名,第二个为内部参数名

func fun1(name arg1: String , age arg2: Int){
    //其中的name跟age是外部参数名
    //arg1跟arg2是内部参数名
    print("\(arg1) is \(arg2) year's old")
}

内部参数名在函数体内部使用,外部参数名那个在调用时使用(且必须使用)。

fun1(name:"Qing",age:4)// 结果输出: Qing is 4 year's old

这么做的优点是增加代码的可读性。

简写外部参数

参数名前加#表示参数使其同时作为内部参数名和外部参数名。

func fun1(#name: String , #age: Int){}

默认参数

参数名后加一个赋值语句可以给其设一个默认参数。

func fun1(#name: String , age: Int = 5){
    println("\(name) is \(age) year's old")
}
fun1(name: "Qing" , age:4) //Qing is 4 year's old
fun1(name: "Bang")          //Bang is 5 year's old ,这里的5调用了默认参数

可变参数

参数类型后带三个点...表示,在函数内部被当做是数组处理。

func fun2(number : Int...) -> Int{
    // 这里会把number当做是一个Int[]数组。
    return 0
}

注意: 一个函数至多能有一个可变参数,而且它必须是参数表中最后的一个。这样做是为了避免函数调用时出现歧义

常量参数和变量参数

函数参数默认为常量,是不可更改的。
如果想声明为变量参数,使用var关键字。

func fun3(var s : String){
    //这里s即可以更改了
}

输入输出参数

使用inout关键字定义一个输入输出参数,此类参数的修改可以在函数体外的其他地方被反映。
调用函数的时候参数前要使用&符号。 妈蛋,这不是就是C语言的指针么!

函数类型

所有参数的类型以及返回值的类型,共同组成函数的类型。
(输入)->(输出)
如上述的

  • fun1类型为 (String,Int)->()
  • fun2类型为 (String,Int)->Int
  • fun3类型为 (String)->()

注意Void跟空元组的类型是一样的

函数类型的使用

函数类型可以用于函数类型变量的赋值等(作为一个类型使用)。
可以作为参数类型。
可以作为返回值类型。

var mathFunction: (Int, Int) -> Int = addTwoInts

嵌套函数

定义在其他函数体中的函数……



这笔记只是给我自己看的,用以标记一些我觉得需要记的或者有意思的一些知识点,有很多我觉得没必须要赘述的东西就没记,所以是不系统的,只作提示用。
感谢 numbbbbb以及其他贡献者: https://github.com/numbbbbb/the-swift-programming-language-in-chinese
当然,还有英文页: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6-XID_70


http://www.barryzhang.com/archives/243

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*