관리 메뉴

사과하는 제라스

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

제라스의 Swift 공부/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
    반응형