iOS/Swift

클로저 3편

밤새는 탐험가89 2024. 2. 10. 22:25

 

 

트레일링 클로저 

 

트레일링 클로저는 클로저의 경량문법

즉, 클로저를 좀 더 보기 편하게 도와주는 문법

 

함수의 마지막 파라미터가 클로저일 때 

이를 파라미터 값 형식이 아닌 함수 뒤에 붙여 작성하는 문법으로 

이 때, 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 라는 파라미터를 생략하고 클로저를 작성

 

단, 파라미터가 여러 개 일 경우에는, 

함수 호출 구문 "( )"을 생략 불가

 

 

 

'iOS > Swift' 카테고리의 다른 글

클로저 5편  (1) 2024.02.13
클로저 4편  (0) 2024.02.10
클로저 2편  (2) 2024.02.08
클로저 1편  (0) 2024.02.06
접근제어  (0) 2024.02.05