• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

7.4.4  为外部参数设置默认值

开发者也可以对外部参数设置默认值。这时,调用的时候,也可以省略参数传递本文选自Swift1.2语言快速入门v2.0

【示例7-11】以下的代码就为外部参数toString、withJoiner设置了默认的参数"Swift"和"---"。代码如下:

 

  • import Foundation
  • func join(string s1: String, toString s2: String="Swift", withJoiner joiner:String="---"){
  •         println("\(s1)\(joiner)\(s2)")
  • }
  • join(string:"Hello")

 

由于toString和withJoiner已经设置了默认值,所以调用的时候就省略对两个参数的传值。运行结果如下所示:

 

  • Hello---Swift

 

7.4.5  可变参数

使用可变参数,可以使一个参数接受零个或多个指定类型的值。设定一个可变参数需要在参数类型名后添加“...”本文选自Swift1.2语言快速入门v2.0

【示例7-12】下面代码使用可变参数计算任意数字的算术平均值。代码如下:

 

  • import Foundation
  • func average(numbers: Double...){
  •     var total: Double = 0
  •     for number in numbers {
  •         total += number
  •     }
  •     println(total/Double(numbers.count))
  • }
  • average(1, 2, 3, 4, 5)
  • average(3, 8, 19)

 

运行结果如下所示:

 

  • 3.0
  • 10.0

 

在使用可变参数时,需要注意以下几点:

1.只有一个可变参数

在一个函数中,可变参数只可以有一个。否则,就会出现错误。如下代码:

 

  • func average(numbers: Double...,aa:Int...){
  •   …
  • }

 

在一个函数中出现了两个可变参数number和aa,导致程序出现了如下的错误提示信息:

 

  • '...' must be on the last parameter

 

2.可变参数必须放在最后

可变参数不管在什么时候都必须放在所有参数之后,即作为最后一个参数。否则,就会出现错误,如下代码:

 

  • func average(numbers: Double...,aa:Int){
  •    …
  • }

 

在此代码中可变参数numbers放在了aa参数之前,导致程序出现了如下的错误信息:

 

  • '...' must be on the last parameter

 

7.4.6  常量参数和变量参数

在函数中,参数默认都是常量。如果想要改变一个函数参数的值,会引起程序错误。如以下代码:

 

  • func fun(num:Int){
  •     num=num+1
  •     println(num)
  • }

 

在此代码中,函数参数num默认是一个常量,而常量的值是不能改变的,所以导致程序出现如下的错误信息

 

  • Cannot assign to 'let' value 'num'

 

如果想要对参数进行修改,必须要使用一个类似于变量的参数,Swift称之为变量参数。变量参数的定义就是在参数名前使用一个var关键字。以下的代码就是使用了变量参数实现了字符串右对齐的功能。代码如下:

 

  • import Foundation
  • func alignRight(var string: String, cou: Int, pad: String) {
  •     var sc=count(string)
  •     let amountToPad = cou - sc                                                                //获取输入"*"的个数
  •    //遍历
  •    for _ in 1...amountToPad {
  •         string = pad + string
  •     }
  •     println(string)
  • }
  • let originalString1 = "swift"
  • alignRight(originalString1, 10, "*")
  • let originalString2 = "Hi"
  • alignRight(originalString2, 10, "*")
  • let originalString3 = ""
  • alignRight(originalString3, 10, "*")

 

运行结果如下所示:

 

  • *****swift
  • ********Hi
  • **********

 

注意:变量参数只能存在于函数调用的生命周期中。

7.4.7  输入-输出参数

以上所讲的参数只可以在函数本身内改变。例如以下的代码,想要实现对a和b数值的交换。代码如下本文选自Swift1.2语言快速入门v2.0

 

  • import Foundation
  • func swapTwoInt(var number1: Int, var number2: Int) {
  •     //实现两个整数的交换
  •     let temp = number1
  •     number1 = number2
  •     number2 = temp
  •     println("函数体内:a=\(number1)")
  •     println("函数体内:b=\(number2)")
  • }
  • var a=2
  • var b=3
  • println("交换前")
  • println("a=\(a)")
  • println("b=\(b)")
  • println("交换后")
  • swapTwoInt(a, b)
  • println("a=\(a)")
  • println("b=\(b)")

 

运行结果如下所示:

交换前

 

  • a=2
  • b=3

 

交换后

 

  • 函数体内:a=3
  • 函数体内:b=2
  • a=2
  • b=3

 

在运行结果中可以看到,a和b的值可在函数本身内实现了交换。如果开发者想用一个函数来修改参数的值,并且想让这些变化在函数调用后仍然有效。这时,需要定义输入-输出参数。它的定义是通过在参数名前加入inout关键字。其语法形式如下:

 

  • func 函数名(inout 参数名: 数据类型, ……) {
  •    …
  • }

 

输入-输出参数都有一个传递给函数的值,将函数修改后,再从函数返回来替换原来的值。其调用形式如下:

 

  • 函数名(&参数, ……)

 

其中,参数前面加上&操作符。

【示例7-13】以下的代码使用输入输出参数实现a和b数值的交换功能。代码如下:

 

  • import Foundation
  • func swapTwoInt(inout number1: Int, inout number2: Int) {
  •     //实现两个整数的交换
  •     let temp = number1
  •     number1 = number2
  •     number2 = temp
  • }
  • var a=2
  • var b=3
  • println("交换前")
  • println("a=\(a)")
  • println("b=\(b)")
  • println("交换后")
  • swapTwoInt(&a, &b)
  • println("a=\(a)")
  • println("b=\(b)")

 

运行结果如下:

交换前

 

  • a=2
  • b=3

 

交换后

 

  • a=3
  • b=2

 

注意:如果一个函数的参数是输入-输出参数,在调用时,必须在参数前加一个“&”符号,否则程序就会出现错误。如以下代码,在调用具有输入输出得函数时,在参数前没有添加“&”符号。代码如下:

 

  • import Foundation
  • func swapTwoInt(inout number1: Int, inout number2: Int) {
  •    ……
  • }
  • var a=2
  • var b=3
  • ……
  • swapTwoInt(a, b)
  • ……

 

由于在函数,调用时没有在参数前添加“&”符号,导致程序出现了以下的错误本文选自Swift1.2语言快速入门v2.0

 

  • Passing value of type 'Int' to an inout parameter requires explicit '&'

 

注意:在Swift 1.2中有一个新的属性“@noescape”可以用在函数中,这意味着这个参数是唯一可被调用的(或者用在函数调用时以参数的方式出现),其意思是它的生命周期比函数调用的周期短,这有助于一些小的性能优化本文选自Swift1.2语言快速入门v2.0


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Swift]LeetCode682.棒球比赛|BaseballGame发布时间:2022-07-13
下一篇:
【swift】 iOS11 Vision框架实现横屏动态人脸关键点识别发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap