Swift 1.1语言函数参数的特殊状况本地参数名外部参数名

Swift 1.1语言函数参数的特殊状况本地参数名外部参数名

7.4  函数参数的特殊状况

声明定义有参函数时,为函数的每个参数都定义了参数名称。根据参数名定义的形式不一样,函数参数包括本地参数和外部参数名两种本文选自swift入门很简单。swift

7.4.1  本地参数名

本地参数名就是定义函数名时,在参数列表中所写的参数名,它只能够在函数主体内使用。如如下的一个代码片断,它定义了一个函数名为fun的函数,在此函数的参数列表中定义的就是本地参数名文选自swift入门很简单函数

  • func fun(start:Int,end:Int,str:String){spa

  •   ……code

  • }orm

在以上的代码中,定义的参数名startendstr都是本地参数名。它只能够在函数自己的代码中使用,在调用时就不能够使用了。开发

7.4.2  外部参数名

在函数中,若是每个参数的目的不是很明确或者是含糊不清的,那么对于其余开发者来讲,是很难理解参数的目的。例以下面的代码,它是一个具备字符串链接功能的函数,代码以下文选自swift入门很简单字符串

  • func join(s1: String, s2: String, s3: String) {编译器

  •     println("\(s1)\(s3)\(s2)")string

  • }it

  • join("hello","world",",")

对于这么一个函数来讲,参数s1s2s3只知道是三个字符串,可是涉及到每个参数的具体目的,就不是很容易理解了。为了解决这一难题,Swift提供了外部参数名称。外部参数和本地参数的定义是同样的。可是若是开发者须要更好的表达参数的功能,须要在定义时使用外部参数名。外部参数名须要写在本地参数名以前,并使用空格将其分开。它的通常形式以下:

  • func 函数名(外部参数名 本地参数名:数据类型){

  •   ……

  • }

对于外部参数名的函数,调用形式以下:

  • 函数名(外部参数名:参数值)

【示例7-7】如下示例为具备字符串链接功能的函数定义外部参数。代码以下:

  • func join(string s1: String,tostring s2: String, joiner s3: String) {

  •     println("\(s1)\(s3)\(s2)")

  • }

  • join(string: "Hello", tostring: "Swift", joiner: ",")

  • 其中,stringtostringjoiner都是外部参数名。运行结果以下:

  • Hello,Swift

  • Program ended with exit code: 0

这里须要注意如下三点:

1)调用时使用外部参数:若是为参数提供了一个外部参数名后,须要在调用该函数的同时使用外部参数名。不然,程序就会提示错误。例以下面的具备字符串链接功能的函数调用代码文选自swift入门很简单

  • join("Hello", "Swift",  ",")

因为在上方的代码中没有使用外部参数名stringtostringjoiner,因此出现了如下的错误提示:

  • Missing argument labels 'string:tostring:joiner:' in call

2)参数的顺序:使用外部参数名能够很好的让其余开发者理解各个参数的目的,可是它的调用顺序也必需要和定义声明函数时的一致。例如如下代码调用具备字符串链接功能的函数:

  • join(tostring: "Swift",string: "Hello", joiner: ",")

在声明定义函数时参数的顺序为(string,tostring, joiner),而在调用时顺序为(tostring, string,joiner)。因为顺序不同,致使程序出现如下的错误信息:

  • Argument 'string' must precede argument 'tostring'

3)外部参数名称的快速写法:若是开发者想要为函数的参数提供一个外部参数名,然而本地参数名已经使用了一个合适的名称,这时就不须要再为该参数写相同的两次名称了。取而代之的是,写一次名称,并用一个“#”号做为名称的前缀。它会告诉编译器,这里使用该名称做为本地参数名和外部参数名。其通常的形式以下:

  • func 函数名(#本地参数名:数据类型){

  •   ……

  • }

【示例7-8】如下程序实现字符串链接功能,外部参数名的定义使用了“#”号。代码以下文选自swift入门很简单

  • import Foundation

  • func join(#string:String, #tostring: String, #withJoiner:String) {

  •     println("\(string)\(withJoiner)\(tostring)")

  • }

  • join(string: "hello", tostring: "world", withJoiner: ", ")

虽然定义的时候能够使用“#”简写,可是调用的时候必须写完整的外部参数名。

7.4.3  设定参数默认值

在定义函数的时候,能够为参数设定默认值。这样,在调用的时候,就不用再传递该参数的值。

【示例7-9】如下的代码就为startend参数分别定义了默认值05,其功能是输出05的数值。代码以下:

  • import Foundation

  • //声明定义函数

  • func fun(start:Int=0,end:Int=5){

  •     var i=start

  •     for i;i<=end;++i{

  •         println(i)

  •     }

  • }

  • fun()                                                                  //调用

代码中,函数fun()调用的时候没有传递任何参数值。这是因为定义函数fun()时参数startend都有默认值,因此调用的时候就能够不传递参数。运行结果以下所示文选自swift入门很简单

  • 0

  • 1

  • 2

  • 3

  • 4

  • 5

  • Program ended with exit code: 0

注意:在使用默认值是须要注意如下几点:

1)定义时,将使用默认值的参数放在函数的参数列表的末尾。这确保了调用函数时候, 不会由于省略参数值而影响不具有默认值的参数的顺序。

2)调用时,若是参数的默认值已经被设置,能够省略该参数的传值。

3)若是开发者设定了默认值,但在调用时想要改变默认值,也能够继续赋值。

【示例7-10】如下代码输出38之间的数值,包括38。代码以下:

  • import Foundation

  • func fun(start:Int=0,end:Int=3){

  •     var i=start

  •     for i;i<=end;++i{

  •         println(i)

  •     }

  • }

  • println("使用默认值范围")

  • fun()

  • println("使用改变后的范围")

  • fun(start:3,end:8)                                                                               //改变了默认值

在代码中,第一次调用使用了参数的默认值,第二次调用改变了参数的默认值。运行结果以下文选自swift入门很简单

  • 使用默认值范围

  • 0

  • 1

  • 2

  • 3

  • 使用改变后的范围

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • Program ended with exit code: 0

在为参数设定默认值后,Swift会自动为该参数提供了同名的外部参数名。若是调用时须要改变默认值,必须使用外部参数,不能直接赋值。不然,就会出现错误,如如下的代码:

  • fun(3,8)

在此代码中,对startend进行了直接赋值,因此致使程序错误,其错误信息以下所示文选自swift入门很简单

  • Missing argument labels 'start:end:' in call

相关文章
相关标签/搜索