트레일링 클로저
트레일링 클로저는 클로저의 경량문법
즉, 클로저를 좀 더 보기 편하게 도와주는 문법
함수의 마지막 파라미터가 클로저일 때
이를 파라미터 값 형식이 아닌 함수 뒤에 붙여 작성하는 문법으로
이 때, Argument Label은 생략
파라미터가 클로저 하나인 함수
func runSomething(closure: () -> ()) {
closure()
}
해당 함수를 호출하는 방법
runSomething(closure: { () -> () in print("Hello")})
위의 방식을 Inline Closure 라고 함
클로저가 파라미터의 값으로 함수 ( ) 안에 작성되어 있는 것을 말함
이 때 함수 구문 뒷 부분에 ")})" 이런식으로 되어 있는게
코드를 작성할 때 실수할 수 도 있고,
보기도 불편함
따라서 클로저를 파라미터의 값으로 보내는게 아닌,
함수의 마자믹에 클로저를 꼬리처럼 붙여서 사용하는게 바로 "트레일링 클로저"
// 파라미터의 값으로 보내는 형태
runSomething(closure: { () -> () in print("Hello")})
// 함수 끝에 작성하는 클로저의 형태
runSomething() { () -> () in print("Hello") }
이 때
파라미터가 클로저 하나일 경우,
이 클로저는 마지막 파라미터이므로 트레일링 클로저 가능
여기서 "closure"라는퍼라미터는 트레일링 클로저에서 생략
추가로, 파라미터가 클로저 하나일 경우엔 함수호출 구문인 " ( )" 생략할 수 있음
runSomething{ () -> () in
print("Hello")
}
파라미터가 여러 개인 함수
func runSomething(value1: () -> (), value2: () -> ()) {
print("value1")
print("value2")
}
위의 함수를 Inline Closure로 표현하면
runSomething(value1: { () -> () in
print("value1")
}, value2: () -> () in
print("value2")
})
여기서 트레일링 클로저의 경우
마지막 파라미터의 클로저는 함수 뒤에 붙여 사용할 수 있음
runSomething(value1: { () -> () in
print("value1")
}) { () -> () in
print("value2")
}
value1은 함수 호출 구문 ( ) 안에 넣어주고
그 뒤에 value2 라는 파라미터를 생략하고 클로저를 작성
단, 파라미터가 여러 개 일 경우에는,
함수 호출 구문 "( )"을 생략 불가