iOS开发Swift篇—(八)函数(2)
一、函数类型
函数类型也是数据类型的一种,它由形参类型和返回值类型组成,格式是
(形参类型列表) -> 返回值类型
func sum(num1: Int, num2: Int) -> Int {
return num1 + num2
}
sum函数的函数类型是(Int, Int) -> Int
func printLine()
{
println("-----------")
}
printLine函数的函数类型有4种表示方法
(1)Void -> Void
(2)() -> ()
(3)Void -> ()
(4)() -> Void
二、利用函数类型定义变量
可以利用函数类型来定义变量,将来可以存储这种类型的函数
func sum(num1: Int, num2: Int) -> Int {
return num1 + num2
}
var fn: (Int, Int) -> Int = sum
fn(, ) // 返回30
由于Swift有类型推断机制,因此,也可以这么写
var fn = sum // fn以后所存储函数的类型就必须是(Int, Int) -> Int
三、函数作为参数
跟其他数据类型一样,函数也能当函数的参数
func printResult(fn: (Int, Int) -> Int, num1: Int, num2: Int)
{
println("运算结果是:%d", fn(num1, num2))
}
fn参数接收一个函数,这个函数必须返回Int、有2个Int类型的参数
func sum(num1: Int, num2: Int) -> Int {
return num1 + num2
}
func minus(num1: Int, num2: Int) -> Int {
return num1 - num2
}
printResult(sum, , ) //
printResult(minus, , ) //
四、函数作为返回值
跟其他数据类型一样,函数也能当函数的返回值
func goToWork() { println("去上班") }
func playFootball() { println("踢足球") }
func howToDo(day: Int) -> () -> () {
if day < {
return goToWork
} else {
return playFootball
}
}
var fn = howToDo()
fn()
// 踢足球
五、函数重载
函数重载:函数名相同,函数类型不同
下面的2个函数构成重载
(1)函数名:sum,函数类型:(Int, Int) -> Int
func sum(num1: Int, num2: Int) -> Int {
return num1 + num2
}
(2)函数名:sum,函数类型:(Int, Int, Int) -> Int
func sum(num1: Int, num2: Int, num3: Int) -> Int {
return num1 + num2 + num3
}
六、嵌套函数
全局函数:在全局作用域中定义的函数
嵌套函数:在某个函数体中定义的函数
代码示例:
func howToDo(day: Int) -> () -> () {
func goToWork() { println("去上班") }
func playFootball() { println("踢足球") }
if day < {
return goToWork
} else { return playFootball }
}
var fn = howToDo()
fn() // 去上班
goToWork()
注意:第10行是错误写法,嵌套函数的作用域仅限于定义嵌套函数的函数体内部