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 )