1.多重输入参数:函数可以有多个输入参数,写在圆括号中,用逗号分隔。 func halfOpenRangeLength(start: Int,end: Int) -> Int { return end - start } 2.无参函数:函数可以没有参数 func sayHelloWorld() -> String { return "hello,world" } 3.多参量函数:函数可以有多种输入参数,这写参数被包含在函数的括号之中,以逗号分隔. func sayHello(personName: String,alreadyGreeted: Bool) -> String { if alreadyGreeted { return sayHelloAgain(personName) } else { return sayHello(personName) } } 4.无返回值函数:没有定义返回类型的函数会返回特殊的值,叫 Void func sayGoodbye(personName: String) { print("Goodbye,\(personName)!") } 5.多重返回值函数:可以用元组(tuple)类型让多个值作为一个复合值从函数中返回。 func minMax(array: [Int]) -> (min: Int,max: Int) { var currentMin = array[0] var currentMax = array[0] for value in array[1..<array.count] { if value < currentMin { currentMin = value } else if value > currentMax { currentMax = value } } return (currentMin,currentMax) } 6.指定外部参数名:你可以在本地参数名前指定外部参数名,中间以空格分隔. func sayHello(to person: String,and anotherPerson: String) -> String { return "Hello \(person) and \(anotherPerson)!" } print(sayHello(to: "Bill",and: "Ted")) 7.忽略外部参数名:不想为第二个及后续的参数设置参数名,用一个下划线(_)代替一个明确地参数名. func someFunction(firstParameterName: Int,_ secondParameterName: Int) { // function body goes here // firstParameterName and secondParameterName refer to // the argument values for the first and second parameters } someFunction(1,2) 8. 默认参数值:在函数体中为每个参数定义默认值(Deafult Values)。当默认值被定义后,调用这个函数时可以忽略这个参数。 func someFunction(parameterWithDefault: Int = 12) { // function body goes here // if no arguments are passed to the function call,// value of parameterWithDefault is 42 } someFunction(6) // parameterWithDefault is 6 someFunction() // parameterWithDefault is 12 9.可变参数:一个可变参数(variadic parameter)可以接受零个或多个值。函数调用时,你可以用可变参数来传入不确定数量的输入参数。通过在变量类型名后面加入(...)的方式来定义可变参数。 传入可变参数的值在函数体内当做这个类型的一个数组。例如,一个叫做 numbers 的 Double... 型可变参数,在函数体内可以当做一个叫 numbers 的 Double[] 型的数组常量。 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) 10.常量参数和变量参数:函数参数默认是常量。试图在函数体中更改参数值将会导致编译错误。变量参数不是常量,你可以在函数中把它当做新的可修改副本来使用. func alignRight(var string: String,totalLength: Int,pad: Character) -> String { let amountToPad = totalLength - string.characters.count if amountToPad < 1 { return string } let padString = String(pad) for _ in 1...amountToPad { string = padString + string } return string } let originalString = "hello" let paddedString = alignRight(originalString,totalLength: 10,pad: "-") 11.输入输出参数:一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数.定义一个输入输出参数时,在参数定义前加 inout 关键字。一个输入输出参数有传入函数的值,这个值被函数修改,然后被传出函数,替换原来的值。 你只能将变量作为输入输出参数。你不能传入常量或者字面量(literal value),因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数前加&符,表示这个值可以被函数修改。 func swapTwoInts(inout a: Int,inout _ b: Int) { let temporaryA = a a = b b = temporaryA } var someInt = 3 var anotherInt = 107 swapTwoInts(&someInt,&anotherInt) 12. 嵌套函数:嵌套函数是对外界不可见的,但是可以被他们封闭函数(enclosing function)来调用。一个封闭函数也可以返回它的某一个嵌套函数,使得这个函数可以在其他域中被使用。 func chooseStepFunction(backwards: Bool) -> (Int) -> Int { func stepForward(input: Int) -> Int { return input + 1 } func stepBackward(input: Int) -> Int { return input - 1 } return backwards ? stepBackward : stepForward } var currentValue = -4 let moveNearerToZero = chooseStepFunction(currentValue > 0)