首页 > 代码库 > Welcome to Swift (苹果官方Swift文档初译与注解三十)---225~230页(第五章-- 函数)

Welcome to Swift (苹果官方Swift文档初译与注解三十)---225~230页(第五章-- 函数)

Functions (函数)

  函数是一个执行特定任务的代码段.通过名称来标识和调用它们.

  在Swift中,每个函数都有类型,包括函数的参数类型和返回值类型.这些类型与Swift中的其他类型使用起来一样,这使得函数可以作为参数传递给另一个函数,以及可以从一个函数中返  回函数,一个函数也可以写在另一个函数内部,这样可以更有效的封装和嵌套.

Defining and Calling Functions (定义和调用函数)

  当你在定义函数的时候,你可以选择性的命名一个或者多个参数类型值,以及函数执行后的返回值类型.

  每个函数都有一个名字,它是用了描述函数的功能.如果想调用这个函数,可以直接使用函数的名字并传递相应的参数(参数的类型要与函数的参数列表匹配).

  下面是一个greetingForPerson函数的简单例子,它接收一个人名作为参数,返回一个问候语(一个String类型的值):

    func sayHello(personName: String) -> String {

        let greeting = "Hello, " + personName + "!"

        return greeting

    }

  上面的代码包含了函数定义的信息:前缀的关键字func,以及紧跟在函数名称后面的返回箭头符号(->),它表示函数的返回值类型.

  这个定义样例描述了这个函数有什么功能,它要接收什么,以及函数完成后会返回什么.这使得这个函数在代码的其他地方调用都会非常清晰:

    println(sayHello("Anna"))

    // prints "Hello, Anna!"

    println(sayHello("Brian"))

    // prints "Hello, Brian!”

  你可以多次调用sayHello函数,并使用不同的参数值.为了简化函数体,可以使用一行代码整合:

    func sayHelloAgain(personName: String) -> String {

        return "Hello again, " + personName + "!"

    }

    println(sayHelloAgain("Anna"))

    // prints "Hello again, Anna!”

Function Parameters and Return Values (函数的参数和返回值)

  在Swift中,函数的参数和返回值是非常富有弹性的.你可以定义任意类型的返回值,也可以使用一个或者多个参数(或者匿名的参数).

Multiple Input Parameters (多个参数)

  函数可以有多个参数,它们写在函数的括号内,并使用逗号分隔.

  代码例子:

    func halfOpenRangeLength(start: Int, end: Int) -> Int {

        return end - start

    }

    println(halfOpenRangeLength(1, 10))

    // prints "9”

Functions Without Parameters (无参函数)

  函数没有要求必须使用参数.下面的函数例子中使用了没有参数的函数,当它被调用的时候,它总是返回相同的String信息:

    func sayHelloWorld() -> String {

         return "hello, world"

    }

    println(sayHelloWorld())

    // prints "hello, world”

  无参的函数定义的时候仍然需要在函数名后面使用括号().

Functions Without Return Values (无返回值函数)

  函数也可以不定义返回值,这么的代码样例定义了一个函数waveGoodbye,它只是打印输出String值,而不是返回这个值:

    func sayGoodbye(personName: String) {

        println("Goodbye, \(personName)!")

    }

    sayGoodbye("Dave")

    // prints "Goodbye, Dave!"

  由于函数不需要返回值,因此定义函数的时候没有使用返回剪头(->)

  注意点:

  严格意义上说,sayGoodbye函数仍然有返回值,尽管没有定义它的返回值.当函数没有定义返回值的时候,这个函数返回一个Void类型的值.它是一个空的元组,元素个数为零,可以写做  ().

  在调用函数的时候,也可以忽略函数的返回值:

    func printAndCount(stringToPrint: String) -> Int {

        println(stringToPrint)

        return countElements(stringToPrint)

    }

    func printWithoutCounting(stringToPrint: String) {

        printAndCount(stringToPrint)

    }

    printAndCount("hello, world")

    // prints "hello, world" and returns a value of 12

    printWithoutCounting("hello, world")

  // prints "hello, world" but does not return a value”

  注意点:

  函数的返回值可以被忽略,但是函数必须有一个返回值.定义了函数的返回值,但如果在函数最后没有返回值,将会导致一个编译错误.