Swift-TrailingClosure

아토시스·2023년 8월 31일
0

Swift

목록 보기
9/14

함수의 마지막 파라미터가 클로저일 때 , 이름 파라미터 값 형식이 아닌 함수 뒤에 붙여 작성하는 문법! 이때 , Argument Label은 생략된다.
(클로저를 좀 더 보기 편하게 문법을 변형하는 것 - 경량 문법 중 하나)

1. 파라미터가 클로저 하나인 함수

다음과 같이 클로저 하나만 파라미터로 받는 함수가 있을 때


func doSomething(closure: () -> ()) {
    closure()
}

이 함수를 호출하려고 하면 어떻게 해야 했냐면


doSomething(closure: { () -> () in
    print("Hello!")
})
 

이렇게 해야했다 ..
이렇게 클로저가 파라미터의 값 형식으로 함수 호출 구문 () 안에 작성되어 있는 것을 Inline Closure 라고 부른당 ~

근데 이런 식으로 작성하면 헷갈리기 쉽다.
따라서 이 클로저를 파라미터 값 형식으로 보내는 것이 아닌, 함수의 가장 마지막에 클로저를 꼬리처럼 덧붙여서 쓸 수 있는데


doSomething () { () -> () in
    print("Hello!")
}

위와 같은 방식으로 쓰는 것이 바로 Trailing Closure 이다!!!!!!!!

여기서 핵심은 두가지가 있당
1. 파라미터 클로저 하나일 경우, 이 클로저는 첫 파라미터이자 마지막 파라미터이므로 트레일링 클로저가 가능
2. Closure 라는 ArgumentLabel은 트레일링 클로저에선 생략

근데 여기서 더 줄여보자면 파라미터가 클로저 하나일 경우호출구문인()도 생략 가능


doSomething { () -> () in
    print("Hello!")
}

이렇게 가능합니다 ~~~!!


2. 파라미터가 여러 개인 함수

다음과 같이 첫 번째 파라미터로 success라는 클로저를 받고 , 두 번째 파라미터로 fail이라는 클로저를 받는 함수가 있다.

func fetchData(success: () -> (), fail: () -> ()) {
    //do something...
}

이런 함수가 있을 때 , Inline Closure의 경우


fetchData(success: { () -> () in
    print("Success!")
}, fail: { () -> () in
    print("Fail!")
})

이런식으로 호출을 하게 된다 !!
하지만 Trailing Closure의 경우에는 마지막 파라미터의 클로저는 함수 뒤에 붙여 쓸 수 있다.


fetchData(success:  { () -> () in
    print("Success!")
}) { () -> () in
    print("Fail!")
}
 

따라서 이런 형태로 사용이 가능하당.
파라미터가 여러 개일 경우, 함수 호출 구문()을 마음대로 생략하면 안된다
success란 파라미터는 파라미터 값 타입으로 넘겨주어야 하니까!

profile
오늘보다 더 나은 내일이 되길 바라며

0개의 댓글