func f_name(v_name :v_Class, ...) -> return_Class {
//fun_content
}
var a :return_Class = f_name(v)
所有的这些信息汇总起来成为函数的定义,并以 func 作为前缀。指定函数返回类型时,用返回箭头 ->(一个连字符后跟一个右尖括号)后跟返回类型的名称的方式来表示。
函数可以有多个参数,用逗号隔开
函数可以没有参数
一般情况下,第一个参数省略其外部参数名,第二个以后的参数使用其本地参数名作为自己的外部参数名.所有参数需要有不同的本地参数名,但可以共享相同的外部参数名.
func sayHello(personName: String, alreadyGreeted: Bool) -> String {
}
调用:sayHello("name", true)
sayHello("name", alreadyGreeted:true)
可以在本地参数名前指定外部参数名,中间以空格分隔
func sayHello(to person: String, and anotherPerson: String) -> String {
}
sayHello(to: "Bill", and: "Ted")
如果你不想为第二个及后续的参数设置参数名,用一个下划线(_)代替一个明确地参数名.
func someFunction(firstParameterName: Int, _ secondParameterName: Int) {
}
someFunction(1, 2)
可以在函数体中为每个参数定义默认值(Deafult Values)。当默认值被定义后,调用这个函数时可以忽略这个参数
func someFunction(parameterWithDefault: Int = 12) {
}
someFunction(6) // parameterWithDefault is 6
someFunction() // parameterWithDefault is 12
一个可变参数(variadic parameter)可以接受零个或多个值。函数调用时,你可以用可变参数来传入不确定数量的输入参数。通过在变量类型名后面加入(...)的方式来定义可变参数。
func arithmeticMean(numbers: Double...) -> Double {
}
arithmeticMean(1, 2, 3, 4, 5)
注意: 最多可以有一个可变参数函数,和它必须出现在参数列表中,为了避免歧义在调用函数有多个参数。 如果你的函数有一个或多个参数有默认值,还有一个可变的参数,将可变参写在参数列表的最后。
定义一个输入输出参数时,在参数定义前加 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)
每个函数都有种特定的函数类型,由函数的参数类型和返回类型组成。
func a_f(a: Int, _ b: Int) -> Int {
}
func b_f(a: Int, _ b: Int) -> Int {
}
var c_f: (Int, Int) -> Int = a_f
c_f = b_f
返回值是函数
func c_f(isa_f:Bool) ->(Int, Int) ->Int {
isa_f ? a_f : b_f
}
可以把函数定义在别的函数体中,称作嵌套函数(nested functions)。
默认情况下,嵌套函数是对外界不可见的,但是可以被他们封闭函数(enclosing function)来调用。一个封闭函数也可以返回它的某一个嵌套函数,使得这个函数可以在其他域中被使用。
func d_f(isa_f:Bool) ->Int {
func a_f() {}
func b_f() {}
}