Closures - 1
Closure
{ ( 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
- Named Closures
- Functiion
- Nested Function
- Unnamed Closures
- Anonymous Function
- 중괄호“{}”로 구분된 코드 블럭
- 일급 객체의 역할을 할 수 있음
✅일급 객체 : 전달 인자, 변수/상수 등으로 저장하거나 전달, 함수의 반환 값 가능 - 참조 타입
- 함수는 클로저의 한 형태로, 이름이 있는 클로저이다.
- objc 의
block
- argument label 을 사용하지 않는다. → 클로저 호출시 argument label 쓰지 X
- parameter 로 전달가능
----------------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
Closure 활용
-
[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]
-
Author And Source
이 문제에 관하여(Closures - 1), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@youn_22/Closures저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)