参数名与外部参数名一致,可以给参数名加#标识:
func containsCharacter(#string: String, #characterToFind: Character) -> Bool {
for character in string {
if character == characterToFind {
return true
}
}
return false
}
let containsAVee = containsCharacter(string: "aardvark", characterToFind: "v")
// containsAVee equals true, because "aardvark" contains a "v"
函数的参数是常量,不可以修改,如果在函数内修改,变量定义前加var
func alignRight(var string: String, count: Int, pad: Character) -> String {
let amountToPad = count - countElements(string)
for _ in 1...amountToPad {
string = pad + string
}
return string
}
let originalString = "hello"
let paddedString = alignRight(originalString, 10, "-")
// paddedString is equal to "-----hello"
// originalString is still equal to "hello"
如果想在函数内修改传入的参数,可以使用inout关键字来标识,传入的参数需要前缀&,这内部实现应该是指针。
func swapTwoInts(inout a: Int, inout b: Int) {
let temporaryA = a
a = b
b = temporaryA
}
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
println("someInt is now (someInt), and anotherInt is now (anotherInt)")
// prints "someInt is now 107, and anotherInt is now 3"
函数类型,可以像js一样使用函数作为参数及返回值
func addTwoInts(a: Int, b: Int) -> Int {
return a + b
} //函数类型为 (Int, Int) -> Int
func multiplyTwoInts(a: Int, b: Int) -> Int {
return a * b
}//函数类型为 (Int, Int) -> Int
//接收名为mathFunction的函数类型
func printMathResult(mathFunction: (Int, Int) -> Int, a: Int, b: Int) {
println("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
闭包
函数与它包含的上下文的变量在一起称为闭包。如sort函数:
let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
func backwards(s1: String, s2: String) -> Bool {
return s1 > s2
}
var reversed = sort(names, backwards)
println(reversed)
// reversed is equal to ["Ewa", "Daniella", "Chris", "Barry", "Alex"]s








