Swift 1.1语言函数参数的特殊情况本地参数名外部参数名Swift 1.1语言快速入门大学霸

Swift 1.1语言函数参数的特殊情况本地参数名外部参数名Swift 1.1语言快速入门大学霸

Swift语言快速入门v3.0

Swift语言快速入门v3.0

7.4  函数参数的特殊情况

声明定义有参函数时,为函数的每一个参数都定义了参数名称。根据参数名定义的形式不同,函数参数包括本地参数和外部参数名两种Swift 1.1语言函数参数的特殊情况本地参数名外部参数名Swift 1.1语言快速入门大学霸。

7.4.1  本地参数名

本地参数名就是定义函数名时,在参数列表中所写的参数名,它只可以在函数主体内使用。如以下的一个代码片段,它定义了一个函数名为fun的函数,在此函数的参数列表中定义的就是本地参数名Swift 1.1语言函数参数的特殊情况本地参数名外部参数名Swift 1.1语言快速入门大学霸。

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

……

}

在以上的代码中,定义的参数名start、end、str都是本地参数名。它只可以在函数本身的代码中使用,在调用时就不可以使用了。

7.4.2  外部参数名

Swift 1.1语言函数参数的特殊情况本地参数名外部参数名Swift 1.1语言快速入门大学霸在函数中,如果每一个参数的目的不是很明确或者是含糊不清的,那么对于其他开发者来说,是很难理解参数的目的。例如下面的代码,它是一个具有字符串连接功能的函数,代码如下:

func join(s1: String, s2: String, s3: String) {

println(“\(s1)\(s3)\(s2)”)

}

join(“hello”,”world”,”,”)

对于这么一个函数来说,参数s1、s2、s3只知道是三个字符串,但是涉及到每一个参数的具体目的,就不是很容易理解了。为了解决这一难题,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: “,”)

其中,string、tostring、joiner都是外部参数名。运行结果如下:

Hello,Swift

Program ended with exit code: 0

这里需要注意以下三点:

(1)调用时使用外部参数:如果为参数提供了一个外部参数名后,需要在调用该函数的同时使用外部参数名。否则,程序就会提示错误。例如下面的具有字符串连接功能的函数调用代码:

join(“Hello”, “Swift”,  “,”)

由于在上方的代码中没有使用外部参数名string、tostring、joiner,所以出现了以下的错误提示:

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】以下程序实现字符串连接功能,外部参数名的定义使用了“#”号。代码如下:

import Foundation

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

println(“\(string)\(withJoiner)\(tostring)”)

}

join(string: “hello”, tostring: “world”, withJoiner: “, “)

虽然定义的时候可以使用“#”简写,但是调用的时候必须写完整的外部参数名Swift 1.1语言函数参数的特殊情况本地参数名外部参数名Swift 1.1语言快速入门大学霸。

Comments are closed.