클로저란, 코드의 블럭(덩어리)을 변수처럼 다룰 수 있게 해주는 기능이다. 쉽게 말하면, 함수처럼 동작하는 "익명 함수"라고 보면 된다.
[[0805-1 저장 프로퍼티, 연산 프로퍼티]]를 공부하다가 클로저라는 말을 보고 머리가 하얘졌다. 생각해보니 공부한 적 있는 것 같다. 다시 복습해보자.
let greet = { print("Hello World") } greet() - 이 코드에서 greet은 클로저다. 함수처럼 생겼지만 이름이 없다. 대신 greet 이라는 상수에 담아서 나중에 호출할 수 있다.
클로저 형태
let add: (Int, Int) -> Int = { (a, b) in return a + b } print(add(3, 5)) // 8 출력 언제 쓰이는가?
- 콜백(callback): 네트워크 작업 끝난 뒤 실행할 코드
- 애니메이션: 완료된 후 할 작업
- 정렬 기준을 정할 때: 배열 정렬할 때 기준 제공
- SwiftUI에서도 엄청 자주 쓴다.
간단 예제
let numbers = [5, 3, 8, 1] let sorted = numbers.sorted { (a, b) in return a < b } print(sorted) // [1, 3, 5, 8] [!note] 이해가 되는 듯 하면서도 익숙하지가 않다. 어렵다. 그래도 그냥 하자.
클로저는 생략도 가능
let sorted = numbers.sorted { $0 < $1 } // 더 간단하게