文档章节

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

大学霸
 大学霸
发布于 2015/03/06 15:29
字数 1793
阅读 151
收藏 3
点赞 0
评论 0

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

7.4  函数参数的特殊情况

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

7.4.1  本地参数名

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

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

  •   ……

  • }

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

7.4.2  外部参数名

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

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

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

  • }

  • 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


© 著作权归作者所有

共有 人打赏支持
大学霸
粉丝 246
博文 843
码字总数 552850
作品 0
东城
程序员
空函数有参函数调用参数的注意事项Swift 1.1语言

空函数有参函数调用参数的注意事项Swift 1.1语言 7.2.3 空函数 空函数有参函数调用参数的注意事项Swift 1.1语言空函数是函数中最简单的形式。在空函数中,函数只有一个空壳,里面是没有任何语...

大学霸 ⋅ 2015/01/16 ⋅ 0

《从零开始学Swift》学习笔记(Day 70)——Swift与Objective-C混合编程之Swift与Objective-CAPI映射

原创文章,欢迎转载。转载请注明:关东升的博客 Swift与Objective-C API映射 在混合编程过程中Swift与Objective-C调用是双向的,由于不同语言对于相同API的表述是不同的,他们之间是有某种映...

tony关东升 ⋅ 2016/03/09 ⋅ 0

《从零开始学Swift》学习笔记(Day 70)——Swift与Objective-C混合编程之

《从零开始学Swift》学习笔记(Day 70)——Swift与Objective-C混合编程之Swift与Objective-CAPI映射 原创文章,欢迎转载。转载请注明:关东升的博客 Swift与Objective-C API映射 在混合编程...

智捷课堂 ⋅ 2016/02/26 ⋅ 0

Swift讲解专题七——函数

Swift讲解专题七——函数 一、引言 函数是有特定功能的代码段,函数会有一个特定的名称调用时来使用。Swift提供了十分灵活的方式来创建与调用函数。事实上在Swift,每个函数都是一种类型,这...

珲少 ⋅ 2016/05/13 ⋅ 1

Swift3.0带来的变化汇总系列三——函数和闭包写法上的微调

Swift3.0带来的变化汇总系列三——函数写法上的微调 一、函数方面 Swift3.0相比Swift2.2的版本在API上做了大量的修改,代码风格也更加统一。在函数方面,Swift3.0中做的最大修改是修改了内部...

珲少 ⋅ 2016/06/26 ⋅ 2

Swift中文教程(四)--函数与闭包

Function 函数   Swift使用func关键字来声明函数,函数通过函数名加小括号内的参数列表来调用。使用->来区分参数名和返回值的类型: 1 func greet(name: String, day: String) -> String ...

joe.huang ⋅ 2014/06/03 ⋅ 0

Swift4.0基础知识回顾

简单介绍一下Swift Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序,Swift语言让应用开发更简单、更快、更稳定,确保最终应用有着更好的质量更多了解Swift可以去《The...

博行天下 ⋅ 2017/12/06 ⋅ 0

Swift笔记-让你2小时学会Swift

过年不能闲着,一边学习Swift,一边写笔记,相信在有一定其他语言基础的情况下用1.5小时看完该文章即可掌握。然后再花30分钟打开XCode写个Demo. 生命中拿出2小时来认识一门语言,很值吧! 笔...

程序员孟帅 ⋅ 2016/02/10 ⋅ 20

​Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数

Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 7.4.4 为外部参数设置默认值 开发者也可以对外部参数设置默认值。这时,调用的时候,也可以省略参数传递本文选自Swi...

大学霸 ⋅ 2015/04/10 ⋅ 0

Swift 4.0 基础学习总结(二)

在 Swift 4.0 基础学习总结(一)中,我们学习的Swift中的基本数据类型以及控制流,Swift简介的语法以及提供的更加适用亲民的方法让我们已经初步感受到这门语言的魅力。今天来继续学习Swift...

xx_cc ⋅ 2017/12/03 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 32分钟前 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

推荐:并发情况下:Java HashMap 形成死循环的原因

在淘宝内网里看到同事发了贴说了一个CPU被100%的线上故障,并且这个事发生了很多次,原因是在Java语言在并发情况下使用HashMap造成Race Condition,从而导致死循环。这个事情我4、5年前也经历...

码代码的小司机 ⋅ 昨天 ⋅ 2

聊聊spring cloud gateway的RetryGatewayFilter

序 本文主要研究一下spring cloud gateway的RetryGatewayFilter GatewayAutoConfiguration spring-cloud-gateway-core-2.0.0.RC2-sources.jar!/org/springframework/cloud/gateway/config/G......

go4it ⋅ 昨天 ⋅ 0

创建新用户和授予MySQL中的权限教程

导读 MySQL是一个开源数据库管理软件,可帮助用户存储,组织和以后检索数据。 它有多种选项来授予特定用户在表和数据库中的细微的权限 - 本教程将简要介绍一些选项。 如何创建新用户 在MySQL...

问题终结者 ⋅ 昨天 ⋅ 0

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部