티스토리 뷰
이전에 클로저에 대해 어느정도 정리를 해뒀었지만, 통합하여 제대로 정리해보려 합니다..!
(아래 링크는 사실 무시하셔도 전혀 상관없습니다.. 블로그 초창기 공부하려고 시도했던 흑역사에요😭)
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가지 부분을 축약시켰어요!
- func -> 키워드 삭제
- 인자 값 입력 부분 생략:
(closure: () -> Void){}
=>(closure: {})
- 반환 형 부분 생략:
(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
'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 |