Swift语法_函数参数名称

难度系数五颗星,因为第一次看并没有很好理解外部参数和内部参数的概念

总结:外部参数名可以省略,可以与内部参数名同名,但最好独立区分开!!!!

函数参数都有一个外部参数名(external parameter name)和一个局部参数名(local parameter name)。外部参数名用于在函数调用时标注传递给函数的参数,局部参数名在函数的实现内部使用。

抽象栗子:

func someFounction(firstParameterName:Int,secondParameterName:Int){
//外部参数名(函数调用时参数)
//局(内)部参数名(函数的实现内部使用)

}
someFounction(1, secondParameterName: 2)
// 一般情况下,第一个参数省略其外部参数名,第二个以及随后的参数使用其局部参数名作为外部参数名。所有参数必须有独一无二的局部参数名。尽管多个参数可以有相同的外部参数名,但不同的外部参数名能让你的代码更有可读性。

最标准的栗子:

//1>指定外部参数名
//你可以在局部参数名前指定外部参数名,中间以空格分隔:
//注意:如果你提供了外部参数名,那么函数在被调用时,必须使用外部参数名。
func sayHello(to person1:String, and person2:String)->String{
    return "hello \(person1) and \(person2)"
}
//在你调用 sayHello(to:and:) 函数时两个外部参数名都必须写出来
print(sayHello(to: "p1", and: "p2"))
//2>忽略外部参数名
/**1:如果你不想为第二个及后续的参数设置外部参数名,用一个下划线( _ )代替一个明确的参数名。
   2:因为第一个参数默认忽略其外部参数名称,显式地写下划线是多余的。
*/
func someFounction2(firstParameterName:Int, _ secondParameterName:Int){
    // function body goes here
    // firstParameterName and secondParameterName refer to
    // the argument values for the first and second parameters
}
someFounction2(1,2)
//3>默认参数值
/**
*  你可以在函数体中为每个参数定义 默认值(Deafult Values) 。当默认值被定义后,调用这个函数时可以忽略这 个参数。
*/
func someFounction3(parameterWithDefault:Int = 12){
    // function body goes here
    // if no arguments are passed to the function call,
    // value of parameterWithDefault is 12
}
someFounction3(8)//parameterWithDefault is 8
someFounction3()//parameterWithDefault is 12
//4>可变参数
/**
*
一个可变参数(variadic parameter) 可以接受零个或多个值。函数调用时,你可以用可变参数来指定函数参数 可以被传入不确定数量的输入值。通过在变量类型名后面加入 (...) 的方式来定义可变参数。

注意:
1:可变参数的传入值在函数体中变为此类型的一个数组。
2:一个函数最多只能有一个可变参数。
*/
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)
arithmeticMean(13.8,23.6,56.3,23,78)
//5>常量参数和变量参数
/**
*函数参数默认是常量。试图在函数体中更改参数值将会导致编译错误。这意味着你不能错误地更改参数值。但是,有时候,如果函数中有传入参数的变量值副本将是很有用的。你可以通过指定一个或多个参数为变量参数,从而避免自己在函数中定义新的变量。变量参数不是常量,你可以在函数中把它当做新的可修改副本来使用。

对变量参数所进行的修改在函数调用结束后便消失了,并且对于函数体外是不可见的。变量参数仅仅存在于函数调用的生命周期中。
*/
func alignRight(var myString:String,totalLength:Int,pad:Character)->String{
  let amount = totalLength - myString.characters.count
    if amount < 1{
    return myString
    }

    let padString = String(pad)
    for _ in 1...amount{
    myString = padString + myString
    }
    return myString
}
let originString = "hello"
let paddedString = alignRight(originString, totalLength: 10, pad: "!")
//5>输入输出参数(In-Out Parameters)
/**
*  变量参数,正如上面所述,仅仅能在函数体内被更改。如果你想要一个函数可以修改参数的值,并且想要在这些 修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)。

定义一个输入输出参数时,在参数定义前加 inout 关键字。一个输入输出参数有传入函数的值,这个值被函数 修改,然后被传出函数,替换原来的值。想获取更多的关于输入输出参数的细节和相关的编译器优化,请查看输 入输出参数 (页 0)一节。

你只能传递变量给输入输出参数。你不能传入常量或者字面量(literal value),因为这些量是不能被修改 的。当传入的参数作为输入输出参数时,需要在参数名前加 符,表示这个值可以被函数修改。

输入输出参数不能有默认值,而且可变参数不能用  标记。如果你用  标记一个参数,这个参数 不能被var或者let标记。
*/
func swapTwoInts(inout a:Int,inout _ b:Int){
    let temp = a
    a = b
    b = temp
}
var someInt = 3
var anotherInt = 5
//可以看到变量的值在swapTwoInts函数中被修改,尽管它们的定义在函数体外。
//注意:输入输出参数是函数对函数体外产生影响的另一种方式(和返回值是不一样的)
swapTwoInts(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值