티스토리 뷰

Swift

후위 클로저 (Trailing Closures)

강경 2021. 3. 25. 10:45
728x90
반응형

이전에 클로저에 대해 어느정도 정리를 해뒀었지만, 통합하여 제대로 정리해보려 합니다..!
(아래 링크는 사실 무시하셔도 전혀 상관없습니다.. 블로그 초창기 공부하려고 시도했던 흑역사에요😭)
Closure - 1
Closure - 2
Closure - Capturing Values
Closure - 3



저번 게시글에서 알 수 있듯, 클로저는 변수에 할당이 가능해요!

let simpleClosure = {

}

말인 즉슨, 클로저 자체를 메서드의 파라미터로 보내거나, 반환타입으로 설정할 수 있다는 뜻이죠😮

파라미터로 클로저 형태를 받는 메서드를 예로들어볼게요!

func someFunctionThatTakesAClosure(closure: () -> Void) {
    // function body goes here
}

() -> Void클로저를 파라미터로 받는 someFunctionThatTakesAClosure()메서드에요!


someFunctionThatTakesAClosure(closure: {
    // closure's body goes here
})

총 3가지 부분을 축약시켰어요!

  1. func -> 키워드 삭제
  2. 인자 값 입력 부분 생략: (closure: () -> Void){} => (closure: {})
  3. 반환 형 부분 생략: (closure: () -> Void){} => (closure: {})

someFunctionThatTakesAClosure() {
    // trailing closure's body goes here
}

더욱 축약된 형태가 되었네요~~?
someFunctionThatTakesAClosure(closure: {}) => someFunctionThatTakesAClosure(){}
이렇게, 클로저의 갈호안에있던 클로저가 갈호뒷부분에 위치하는 클로저를 후위 클로저 (Trailing Closures)라고 합니다!




저번 게시글에서 작성했던 클로저를 하위 클로저로 바꿔보면,

reversedNames = names.sorted() { $0 > $1 }

// transe to Trailing Closures

reversedNames = names.sorted { $0 > $1 }

이렇게 되겠죠👍🏻




이번에는 후위 클로저를 이용해 숫자(Int)를 문자(String)로 매핑(Mapping)하는 경우를 볼게요🧐

let digitNames = [
    0: "Zero", 1: "One", 2: "Two",   3: "Three", 4: "Four",
    5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"
]

let numbers = [16, 58, 510]

digitNames라는 배열이 있어요!
0번째에는 "Zero", 1번째에는 "One", ... 9번째에는 "Nine"가 들어있는 배열입니다.
numbers라는 배열은 숫자 3개가 들어있는 배열이군요!
우리는 이 숫자들을 각각 영어단어(string)형태로 만들어 줄거에요😲

let strings = numbers.map { (number) -> String in
    var number = number
    var output = ""
    repeat {
        output = digitNames[number % 10]! + output
        number /= 10
    } while number > 0

    return output
}

// output -> ["OneSix", "FiveEight", "FiveOneZero"]

재배치를 해주기 위해 배열(Array)에서 사용할 수 있는 Swift표준라이브러리 클로저인map()을 이용하였습니다!
map()에서는, 인자로 숫자(Int)를 받고, 문자(String)를 반환하는 형태의 클로저를 인자로 받고있어요!
repeat구문에 대한 이해🤯를 하면 좋지만,
그거보다 우리는 후위 클로저를 사용하는 이유를 이해하는게 더 중요해요😗




이렇게, 후위 클로저 (Trailing Closures)에 대해 알아보았어요!
클로저의 내용이 길어지는 경우에는 후위 클로저의 형태를 사용하는게 더 보기 편하겠죠~?
다음 글에서는 값 캡쳐 (Capturing Values)에 대해 소개해보겠습니다!


이해가 안되는 부분이나, 틀린 부분이 있으면 코멘트를 남겨주세요!
피드백은 정말정말 환영입니다🎉🎉

Reference

공식문서
공식문서 번역본

728x90
반응형

'Swift' 카테고리의 다른 글

고차함수 (Higher Order Functions, 고계함수)  (0) 2021.04.12
값 캡쳐 (Capturing Values)  (0) 2021.03.25
클로저 표현 (Closure Expressions)  (0) 2021.03.23
이름 짓기  (0) 2021.02.13
Initializer  (0) 2021.01.02