클로저 표현식과 클로저는 비슷하지만 차이점이 있다.
클로저란?
함수나 클로저 표현식과 같은 독립적인 코드 블록과 코드 블록 주변에 있는 하나 이상의 변수가 결합된 것
클로저는 크게 3가지의 형태를 띈다.
클로저 표현식이란?
독립적인 코드 블록이다.
let sayHello = { print("Hello") }
sayHello()
위의 코드가 클로저 표현식을 선언하고 상수에 할당하여 상수 참조를 통해 함수를 호출한 것이다.
클로저 표현식은 매개변수를 받아 결과값을 반환하도록 할 수도 있다.
{(<매개변수 이름>: <매개변수 타입>, <매개변수 이름>: <매개변수 타입>,...)-><반환 타입> in
//클로저 표현식 코드
}
//example
let multiply = {(_ val1:Int, _ val2:Int) -> Int in
return val1 * val2
}
let result = multiply(10, 20)
클로저 표현식은 이름을 갖지 않으며, 매개변수와 반환타입은 괄호 안에 포함하고, 클로저 표현식 코드의 시작을 알리기 위해 in키워드를 사용한다.
클로저 표현식은 비동기 메서드 호출에 대한 완료 핸들러를 선언할 때 종종 사용된다. 예를 들면, ios 어플리케이션을 개발할 때 어떤 작업을 백그라운드에서 작업하게 해서 어플리케이션이 다른 작업을 계속 할 수 있도록 운영체제에게 요청해야하는 경우가 종종 생기는데, 이때는 시스템이 어플리케이션에게 작업이 완료된 것을 알리고 작업을 호출할 때 선언했던 완료 핸들러를 호출하여 결과를 반환한다. 완료 핸들러가 주로 클로저 표현식의 형태로 구현된다.