{ ( parameters ) -> ReturnType in
// statements //
}
-- param 과 return type 이 생략된 가장 단순한 클로저 --
{ // statements // }
let c = { pirnt("Hello") } // param, return 생략된 클로저, 자료형 : () -> ()
let c2 = { (str: String) -> String in // str 은 param name 이지 argument label이 아님
return "Hello, \(str)"
}
c() // Hello
print(c2("Closure")) // Hello Closure
block
----------------parameter 전달 예시----------------------
typealias SimpleStringClosure = (String) -> String
func perform(closure: SimpleStringClosure) {
print(closure("iOS"))
}
perform(closure: c2)
=> Hello, iOS
perform(closure: { (str: String) -> String in
return "Hi, \(str)"
}) // inline closure
-> Hi, iOS
[Swift]Map, Filter, Reduce 그리고 추론
Map
클로저로 각 항목들을 반영한 결과물을 가진 새로운 배열 만듬
let array = [0, 1, 2, 3]
let multipliedArray = array.map( { (value: Int) -> Int in return value * 2 } )
// [2, 4, 6, 8]
Reduce
배열의 각 항목들을 재귀적으로 클로저를 적용시켜 하나의 값 만듬
array.reduce(0, { (s1: Int, s2: Int) -> Int in
return s1 + s2
}) //0 은 초기값
Filter
클로저로 각 항목들을 비교하여 일치하는 결과물을 가진 새로운 배열 반환
let oddArray = array.filter( { (value: Int) -> Bool in return (value % 2 == 0) } )
//[2, 4]