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


    Default Parameter Values (参数默认值)

      在定义函数的时候,你可以给任何参数定义一个默认的值,如果定义了默认值,在调用这个函数的时候,你可以忽略这个参数.

      注意:

      设置参数默认值的时候,需要按照函数的参数列表最后的开始,这可以确保在调用函数的时候,即使没默认值的参数也可以按顺序的对应上,也使得函数在调用的时候更加清晰.

      下面的代码例子是join函数的新版本,它使用了默认参数:

        func join(string s1: String, toString s2: String,

            withJoiner joiner: String = " ") -> String {

                return s1 + joiner + s2

      }

      如果在调用joiner函数的时候,设置了一个string的默认值,那么这个值可以与另外一个字符串拼接在一起:

        join(string: "hello", toString: "world", withJoiner: "-")

        // returns "hello-world”

      但是如果调用joiner的时候没有设置默认值,系统将会使用一个空格代替:

        join(string: "hello", toString: "world")

        // returns "hello world”

    External Names for Parameters with Default Values (默认值的扩展名)

      在多少情况下,对参数使用默认值的时候都需要提供扩展名.这样可以明确参数的意义,尤其是在调用函数的时候.

      为了方便,在你没有提供扩展名的时候,Swift提供了自动扩展名给定义的默认参数.这个自动扩展名与局部参数名相同,就好像你写了一个#号在局部变量的前面.

      下面是join函数的的一个版本,它没有提供参数的扩展名,但提供了默认值:

        func join(s1: String, s2: String, joiner: String = " ") -> String {

            return s1 + joiner + s2

        }

      在这种情况下,Swift自动的提供了一个扩展的参数名给有默认值的参数.因此在调用函数的时候,必须提供扩展名的参数,这使得函数的参数更加清楚和没有歧义:

        join("hello", "world", joiner: "-")

        // returns "hello-world”

    Variadic Parameters (可变参数)

      一个可变参数可以接收某种类型的0个或者多个值.在调用函数的时候,你可以使用可变参数来指定传递给函数的参数个数.可变参数的写法是在参数类型名的前面插入三个点字符    (...).

      传递给可变参数的值可以在函数体内作为类似数组的类型使用.例如:

        func arithmeticMean(numbers: Double...) -> Double {

             var total: Double = 0

            for number in numbers {

                total += number

            }

            return total / Double(numbers.count)

        }

        arithmeticMean(1, 2, 3, 4, 5)

        // returns 3.0, which is the arithmetic mean of these five numbers

        arithmeticMean(3, 8, 19)

        // returns 10.0, which is the arithmetic mean of these three numbers

      注意:

      一个函数最多只能有一个可变参数,并且必须在参数列表的最后面,这是为了避免在调用多个参数的函数的时候有歧义.

      如果你定义函数的有一个或者多个参数有默认值,也可以使用可变参数,只是要将它放在所有默认参数的最后面.

    Constant and Variable Parameters (参数常量和参数变量)

      函数参数默认是常量,在函数内部试图修改一个函数的参数值都会产生一个编译错误.这就意味着你不能修改函数的参数.

      然而,有时候一个参数值的可变拷贝对函数是非常有用的,这样你可以避免在定义一个新的变了在函数体内部.参数变量可以像使用变量而不是常量的方式来处理,并给它复制一个参数  值的新拷贝.

      定义参数变量是在参数名前面使用前缀的关键字:var

        func alignRight(var string: String, count: Int, pad: Character) -> String {

            let amountToPad = count - countElements(string)

            for _ in 1...amountToPad {

                string = pad + string

            }

            return string

        }

        let originalString = "hello"

        let paddedString = alignRight(originalString, 10, "-")

        // paddedString is equal to "-----hello"

        // originalString is still equal to "hello”

      这个例子定义了一个叫做alignRight的新函数,它将输入的字符串进行右对齐,在这个例子里,字符串‘hello’被转换为’-----hello’.

      函数alignRight定义了参数变量string,这意味着string是可变的局部变量,可以使用传递的字符串值进行初始化,也可以在函数体内进行修改使用.

      这个函数一开始先计算出有多少个字符需要添加到string的左边来达到右对齐的效果.这个值被存储在局部常量amountToPad中,然后函数添加amountToPad个数量的短横线字符在  string的左边,最后返回结果.

      注意:

      可修改的参数变量作用范围不能超过函数的末尾,并且对于函数之外,它们是不可见的.参数变量的生命期只存在于函数的调用周期.

     //******待续...*******//

  • 相关阅读:
    Android开发之修改Manifest中meta-data的数据
    Android开发之StrictMode
    Cookie默认不设置path时,哪些请求会携带cookie数据
    Servlet中的请求转发
    AndroidCamera开发学习笔记01
    AsyncTask源码解读
    Android Studio自定义签名文件
    Kotlin:Android世界的Swift
    C# 传值给C++
    .NET CLR 运行原理
  • 原文地址:https://www.cnblogs.com/caios/p/3849763.html
Copyright © 2020-2023  润新知