// 1. 带参数和返回值
func greetAgain(person: String) -> String {
return "Hello again, " + person + "!"
}
print(greetAgain(person: "Anna"))
// 打印 "Hello again, Anna!"
// 2.函数做参数
func demo(str:String,addPrefix:(String)->String)->String{
return addPrefix(str)
}
func addPrefix(str2:String)->String{
return "prefix"+str2
}
print(demo(str: "123123", addPrefix: addPrefix))
输出结果 prefix123123
// 3.函数可以带默认值
func logeName(name:String,phone:String = "123456") {
print("有默认值的函数:" , name , phone)
}
self.logeName(name: "XJP")
self.logeName(name: "XJP", phone: "15900514624")
输出:
有默认值的函数: XJP 123456
有默认值的函数: XJP 15900514624
// 4.嵌套函数
到目前为止本章中你所见到的所有函数都叫全局函数(global functions),它们定义在全局域中。你也可以把函数定义在别的函数体中,称作 嵌套函数(nested functions)。
默认情况下,嵌套函数是对外界不可见的,但是可以被它们的外围函数(enclosing function)调用。一个外围函数也可以返回它的某一个嵌套函数,使得这个函数可以在其他域中被使用。
你可以用返回嵌套函数的方式重写 chooseStepFunction(backward:)
函数:
func chooseStepFunction(backward: Bool) -> (Int) -> Int {
func stepForward(input: Int) -> Int { return input + 1 }
func stepBackward(input: Int) -> Int { return input - 1 }
return backward ? stepBackward : stepForward
}
var currentValue = -4
let moveNearerToZero = chooseStepFunction(backward: currentValue > 0)
// moveNearerToZero now refers to the nested stepForward() function
while currentValue != 0 {
print("\(currentValue)... ")
currentValue = moveNearerToZero(currentValue)
}
print("zero!")
// -4...
// -3...
// -2...
// -1...
// zero!