定义和使用函数
下面定义名称 sayHello 的函数,只有一个 String 类型的 name 参数,函数返回值为 String 类型。
func sayHello(name:String)->String{
return "Hello,"+name
}
函数参数和返回值
没有参数的函数
func helloWorld()->String{
return"Hello World"
}
有多个参数的函数,参数之间用逗号分割
func helloPeople(firtName:String,lastName:String)->String{
return"Hello, "+firtName+" "+lastName
}
没有返回值的函数
func printName(firtName:String,lastName:String){
print("Hello, "+firtName+" "+lastName)
}
有多个返回值的函数,函数通过返回一个元组来返回多个值。
func tuplesFunction(name:String)->(hello:String,goodbye:String){
let hello="Hello, "+name
let goodbye="Goodbye, "+name
return(hello,goodbye)
}
函数参数名称
函数的每一个参数都有外部名称和内部名称,外部名称在调用函数时使用,内部名称在函数内部实现中使用。
默认情况,函数第一个参数会忽略外部名称,后面的参数外部名称和内部名称一致,如下面的示例。
func sayHello(firtName:String,lastName:String){
print("Hello, "+firtName+" "+lastName)
}
sayHello("zhao",lastName:"Alex")
指定外部名称
下面示例中 firstName 和 lastName 是外部名称,first 和 last 是内部名称,如果指定了外部名称,调用函数时也要写明外部名称。
func sayHello(firtName first:String,lastName last:String){
print("Hello, "+first+" "+last)
}
sayHello(firtName:"zhao",lastName:"Alex")
忽略外部名称,用下划线来忽略外部名称。
func sayHello(firstName:String,_lastName:String){
print("Hello, "+firstName+" "+lastName)
}
sayHello("zhao","Alex")
默认参数值
函数参数可以指定默认值,在没有传入参数值时,此参数就使用默认值。
func someFunction(parameterWithDefault: Int = 12) {
// function body goes here
// if no arguments are passed to the function call,
// value of parameterWithDefault is 12
}
someFunction(6) // parameterWithDefault is 6
someFunction() // parameterWithDefault is 12
可变参数
函数接受零到多个参数值。
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)
// returns 3.0, which is the arithmetic mean of these five numbers
arithmeticMean(3, 8.25, 18.75)
// returns 10.0, which is the arithmetic mean of these three numbers
输入输出参数
func swapTwoInts(inout a: Int, inout _ b: Int) {
let temporaryA = a
a= b
b = temporaryA
}
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// prints "someInt is now 107, and anotherInt is now 3"
函数类型
函数类型由参数类型和返回值类型构成,如下示例的函数类型就是 (String, String) -> String
func sayHello(firtName:String,lastName:String){
print("Hello, "+firtName+" "+lastName)
}
使用函数类型
每个函数都有种特定的函数类型,由函数的参数类型和返回类型组成。
例如:
func addTwoInts(a: Int, _ b: Int) -> Int {
return a + b
}
func multiplyTwoInts(a: Int, _ b: Int) -> Int {
return a * b
}
这两个函数的类型是(Int, Int) -> Int,可以解读为“这个函数类型有两个Int型的参数并返回一个Int型的值。”。
下面是另一个例子,一个没有参数,也没有返回值的函数:
func printHelloWorld() {
print("hello, world")
}
使用函数类型
在 Swift 中,使用函数类型就像使用其他类型一样。例如,你可以定义一个类型为函数的常量或变量,并将适当
的函数赋值给它:
var mathFunction: (Int, Int) -> Int = addTwoInts
print("Result: \(mathFunction(2, 3))")
// prints "Result: 5"
函数类型作为参数类型
func printMathResult(mathFunction: (Int, Int) -> Int, _ a: Int, _ b: Int) {
print("Result: \(mathFunction(a, b))")
}
printMathResult(addTwoInts, 3, 5)
// prints "Result: 8"
函数类型作为返回类型
func stepForward(input: Int) -> Int {
return input + 1
}
func stepBackward(input: Int) -> Int {
return input - 1
}
func chooseStepFunction(backwards: Bool) -> (Int) -> Int {
return backwards ? stepBackward : stepForward
}
var currentValue = 3
let moveNearerToZero = chooseStepFunction(currentValue > 0)
// moveNearerToZero now refers to the stepBackward() function
嵌套函数
func chooseStepFunction(backwards:Bool) ->Int{
func stepForward(input:Int) ->Int{
returninput +1
}
func stepBackward(input:Int) ->Int{
returninput -1
}
returnbackwards ?stepBackward(4) :stepForward(3)
}
letcurrentValue =3
letmoveNearerToZero =chooseStepFunction(currentValue >0)
print(moveNearerToZero) // 3