Swift에서 함수를 문자열이나 정수형처럼 사용할 수 있다.
이는 생성한 함수를 변수에 할당할 수 있고
그 함수를 변수를 사용하여 호출할 수도 있고
그 함수를 매개변수처럼 다른 함수에 전달할 수도 있다는 것을 의미한다.
let driving = {
print(“I’m driving in my car”)
}
이것은 함수를 이름 없이 만들고 그 함수를 driving에 할당한 것이다.
driving()
클로져를 만들 때 클로져에는 매개변수를 작성할 이름이나 공간이 없다.
클로져는 매개변수를 다른 방식으로 받는다 - 매개변수가 중괄호 안에 나열된다.
클로져가 매개변수를 받게하기 위해서
매개변수를 중괄호 바로 뒤의 괄호 안에 나열하고
in을 적어 스위프트에 클로져의 본문이 시작되는 것을 알려준다.
let driving = { (place: String) in
print(“I’m going to \(place) in my car”)
}
함수와 클로져의 한 가지 차이점은 클로져를 실행할 때는 매개변수 레이블을 사용하지 않는다는 것이다.
driving(“London”)
클로져도 값을 반환할 수 있고 매개변수와 비슷하게 작성된다 : 클로져 안에서 in 키워드 바로 앞에 적는다.
let driving = { (place: String) in
print(“I’m going to \(place) in my car”)
}
👇🏻
let drivingWithReturn = { (place: String) -> String in
return “I’m going to \(place) in my car”
}
let message = drivingWithReturn(“London”)
print(message)
클로져가 문자열이나 정수처럼 사용될 수 있기 때문에 클로져를 함수로 전달할 수도 있다.
let driving = {
print(“I’m driving in my car”)
}
만약 이 클로져를 함수로 전달하여 함수 안에서 실행되길 원한다면, 우리는 매개변수 타입을 () -> Void로 지정해야한다.
이는 “매개변수를 허용하지 않고 Void를 반환합니다” 라는 의미이다 – 이것은 Swift식으로 “nothing”을 말하는 것이다.
func travel(action: () -> Void) {
print(“I’m getting ready to go.”)
action()
print(“I arrived!”)
}
travel(action: driving)
만약 함수의 마지막 매개변수가 클로져라면 Swift는 trailing closure syntax라고 불리는 특별한 구문을 사용하게 할 것이다.
클로져를 매개변수로 전달하기보다 중괄호 안의 함수 바로 뒤로 전달한다.
func travel(action : () -> Void) {
print(“I’m getting ready to go.”)
action()
print(“I arrived!”)
}
이 함수의 마지막 매개변수가 클로져이기 때문에
travel() {
print(“I’m driving in my car”)
}
travel {
print(“I’m driving in my car”)
}
Trailing closure syntax (후행 클로져 구문)은 스위프트에서 매우 자주 사용되기때문에 익숙져야한다.