Swift 函数与闭包
1. 创建函数
func func1() {
print("no params func")
}
func1()
func func2(param: Int) -> Bool {
return param > 60
}
func2(param: 80)
func func3(param1: String, param2: Int) -> (result1: String, result2: Int) {
return (param1 + "11", param2 + 20)
}
let tuple = func3(param1: "param", param2: 60)
if tuple.result1.starts(with: "param") {
print(tuple.result2)
}
func func4(param: Int) -> Int? {
guard param > 2 else {
return nil
}
return param + 2
}
if let result = func4(param: 3) {
print(result)
}
2. 函数内外参数命名
func outerNameFunc(name1 param1: Int, name2 param2: Int, param3: Int) {
print(param1, param2, param3)
}
outerNameFunc(name1: 1, name2: 2, param3: 3)
func normalFunc(param1: Int, param2: Int, param3: Int) {
print(param1, param2, param3)
}
normalFunc(param1: 1, param2: 2, param3: 3)
func annoFunc(_ param1: Int, _ param2: Int, _ param3: Int) {
print(param1, param2, param3)
}
annoFunc(1, 2, 3)
3. 函数参数指定默认值
func func5(param1: Int, param2: Int = 2, param3: Int = 3) {
print(param1, param2, param3)
}
func5(param1: 1)
func5(param1: 1, param2: 22)
func func6(param1: Int, param2: Int = 2, param3: Int) {
print(param1, param2, param3)
}
func6(param1: 1, param3: 33)
4. 可变参数
func mutableParamFunc(param: Int...) {
var sum = 0
for ele in param {
sum += ele
}
print(sum)
}
mutableParamFunc(param: 1, 2)
mutableParamFunc(param: 1, 2, 3, 4)
func immutableParam(param: Int) {
}
func immutableParam(param:inout Int) {
param += 1
print(param)
}
var number = 1
immutableParam(param: &number)
print(number)
5. 函数类型引用,函数嵌套
let func7Name: (Int, Int) -> Bool
func7Name = {(param1: Int, param2: Int) in
return param1 > param2
}
func7Name(1, 2)
func func8(funParam: (Int, Int) -> Bool) {
print(funParam(2, 1))
}
func8(funParam: func7Name)
func func9() -> (Int, Int) -> Bool {
return func7Name
}
func outerFunc() {
let outerScope = "outer scope"
func innerFunc() {
print(outerScope, "in inner func")
}
innerFunc()
}
outerFunc()
6. 闭包:后置闭包、逃逸闭包与自动闭包
let closureFunc1 = {(param1: Int, param2: Int) -> Int in
return param1 + param2
}
closureFunc1(1, 2)
let closureFunc2 = {(param1: Int, param2: Int) in
return param1 + param2
}
closureFunc2(1, 3)
let closureFunc3 = {(param1: Int, param2: Int) in
return param1 < param2
}
closureFunc3(1, 2)
func func10(closureParam: (Int, Int) -> Bool) {
closureParam(2, 1)
}
func10(closureParam: { $0 > $1 })
func10() {
$0 > $1
}
func func11(closureParam: @escaping (Int, Int) -> Bool) {
}
func autoCloseFunc(closureParam: @autoclosure () -> Int) {
print(closureParam())
}
autoCloseFunc(closureParam: 1 + 2 + 3)