swift提供了大量方便快捷的定义方式,今天在这里做一个总结。
1、无参数无返回值函数
func test1() {
print("无参数无返回值函数")
}
调用:test1()
2、多个参数无返回值
func test2(param1:String,param2:Bool) {
print("多个参数参数无返回值函数")
}
调用:test2(param1: "aa", param2: true)
3、多个参数有返回值
func test3(param1:String,param2:Bool) -> String {
return "多个参数参数有返回值函数";
}
注意:虽然又返回值但是调用的时候可忽略返回值
调用:print(test3(param1: "aa", param2: true))
4、具有多个返回值
func test4(a: Int, b:Int) -> (min: Int, max: Int) {
if a < b {
return (a, b)
} else {
return (b, a)
}
}
调用:
let bounds = test4(a: 2,b: 4)
print("min is (bounds.min) and max is (bounds.max)")
oc里面函数是无法做的返回多个值的,但是swift里面增加了元组概念,其实相当于返回一个元组类型的值。
5、可选的元组返回类型
func test5(a: Int, b:Int) -> (min: Int, max: Int) ? {
}
函数是否返回实际的元组值或nil
6、指定参数标签
func test6(p1 param1:String ,p2 param2:String) -> String {
return param1 + param2;
}
调用:print(test6(p1: "a", p2: "b"))
7、省略参数标签
func test7(_ param1:String ,p2 param2:String) -> String {
return param1 + param2;
}
调用: print(test7("a", p2: "b"))
对于标签我们可以这样理解,函数参数有两个名字,一个是给内部用的,一个外部调用使用的,内部的参数名字不能省略,外部的可以省略或者用“_”(对外部调用来讲相当于省略)来代替。
8、默认参数值
func test8(_ param1:String ,p2 param2:String = "c") -> String {
return param1 + param2;
}
调用:
print(test8("a"))
print(test8("a", p2: "b"))
如果不放入第二个参数,函数就使用默认值c,如果给了新参数,函数会使用新给的参数。
9、不固定参数
func test9(_ numbers: Double...) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
调用:test9(1, 2, 3, 4, 5)
函数可以具有至多一个可变参数。
10、进出参数
func test10(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
调用:
var oneInt = 7
var anotherInt = 14
test10(&oneInt, &anotherInt)
print("oneInt is now (oneInt), and anotherInt is now (anotherInt)")
函数修改参数的值,并且在函数调用结束后这些更改仍然存在.可以通过将inout关键字放在参数类型之前来编写输入输出参数。输入输出参数不能具有默认值,并且可变参数不能标记为inout。不能修改常量和文字。
11、函数类型作为参数类型
func test11(_ mathFunction: (String, String) -> String, _ a: String, _ b: String) {
print("Result: \(mathFunction(a,b))")
}
调用:test11(test7, "c", "d") //结果是:cd
12、函数类型作为返回类型
func test12(input: Int) -> (String,String) -> String {
return input > 3 ? test5 : test7
}
调用: print(test12(input: 3)("a","b"))
注意调用的时候需要传两个函数的参数,一个是外部test12参数,还有一个是返回函数的参数
13、函数的嵌套:函数体内可以再定义函数
func test13(a: Int) -> (Int) -> Int{
func test(b: Int) -> Int{
return a + b
}
return test
}
调用:print(test13(a: 4)(5)) // Returns 9