제라스의 iOS 공부/Swift 문법

[Swift 문법] 멀티 트레일링 클로저(multi-trailing Closure)

Xerath(제라스) 2023. 8. 18. 13:02
728x90
반응형

이건 뭘까?

 

우리는 클로저를 매개변수로 받아오는 함수를 구현하기도 하는데...

이때, 만약 여러개의 클로저를 넣는다면 클로저를 넣는 것을 간략하게 줄여서도 쓸 수 있다.

 

다음 코드를 보면 바로 이해가 갈 것이다.

일단, 하나의 클로저 매개변수를 갖는 함수는 이렇다.

// 우리는 보통 이런 식으로 클로저를 함수의 매개변수로 쓴다.
func someFunction(completion: () -> Void){
    print(#fileID, #function, #line, "- ")
    completion()
}

// 이걸 호출 시엔 이렇게 담아주면 되는데
someFunction(completion: {
    print(#fileID, #function, #line, "- hohoho 1")
})

// 이걸 줄이면 이렇게도 쓸 수 있었다.
someFunction {
    print(#fileID, #function, #line, "- hohoho 2")
}

 

다음은 여러개의 클로저 매개변수를 갖는 함수다.

// 여러개의 클로저가 매개변수로 쓰인다면, 다음과 같이 작성할 수도 있다.
func someFunctionWithClosures(first: () -> Void,
                              second: (String) -> Void,
                              third: (Int) -> Void){
    print(#fileID, #function, #line, "- ")
    first()
    second("호롤롤로")
    third(3)
}

// 이걸 호출 시에 각각 이렇게 넣어줄 수도 있지만,
someFunctionWithClosures(first: {
    print("첫번째")
}, second: {
    print("두번째: \($0)")
}, third: {
    print("세번째: \($0)")
})

// 이걸 trailing 즉, 연이어서 써주려면 이렇게도 쓸 수 있다. 이게 멀티 트레일링 클로저다.
someFunctionWithClosures{
    print("first")
} second: { string in
    print("string: \(string)")
} third: { number in
    print("number: \(number)")
}
728x90
반응형