클로저를 공부하다보니 2편까지 오게되었는데.. 1편의 기초를 보지않았다면 1편을 먼저 보고오는것을 적극 추천합니다.
1편의 마지막 코드를 살펴보면 호출과 동시에 클로저를 정의한부분이 있다.
바로 해당코드인데 마지막 method부분을 함수 바깥에서 표현이 가능하다.
동시에 매개변수명도 생략이 가능하다. 이를 후행클로저 라고한다.
후행클로저의 조건
- 마지막 전달인자가 클로저여야함
func calculate(a: Int, b:Int, method: (Int, Int) -> Int) -> Int {
return method(a,b)
}
// 후행클로저를 사용하지않음
var calculateResult = calculate(a: 20, b: 15, method: {(c: Int, d: Int) -> Int in
return c + d //결과 : 35
})
//후행클로저를 사용함
var calculateResult = calculate(a: 20, b: 15) { (c: Int, d: Int) -> Int in
return c + d //결과 : 35
}
클로저는 또 반환타입을 생략이 가능하다. (반환타입 '-> Int'가 생략 되었다.)
예를 들어 c와 b가 Int로 정의되어있는데 당연히 반환값도 Int지 하고 컴파일러가 인지하고있어서 생략이 가능하다.
이는 후행클로저를 사용하지 않아도 동일하게 생략이 가능하다.
//후행클로저를 사용함
var calculateResult = calculate(a: 20, b: 15) { (c: Int, d: Int) in
return c + d
}
지금은 매개변수 명이 a, b등으로 짧아서 return 값에 a+b등으로 기재하는게 편하지만
나중에 파라미터명이 a가 아닌 yoondsNextNumber 등으로 길어진다하면
return yoondsNextNumber + b 로 나타내야할까? 가독성이 너무 떨어지는것같다.
그래서 단축인자이름을 지원한다. in이름을 생략하는 동시에 후행클로저를 함께 사용할수 있다.
매개변수 순서대로 $0, $1, $2..로 표시하면 된다.
var calculateResult = calculate(a: 20, b: 15, method: {
return $0 + $1
// return a + b 와 동일
})
그리고 또한 클로저는 마지막 값(제일 마지막줄)을 반환해주는 관계로
당연히 마지막라인이 반환값이겠지하고 return도 생략이 가능하다.
var calculateResult = calculate(a: 20, b: 15, method: {
$0 + $1
})
클로저의 경량화에 대해서 알아봤는데 경량화가 되면 코드가 직관적이며 간결해지지만
코드를 공유하는 상황에서 이해하기 어렵고 오히려 가독성이 안좋아질수도 있어서 어느정도
경량화를 남발하면 안될것같다.
'Swift(IOS)' 카테고리의 다른 글
| [내용정리] Swift - 메모리 관리 Weak, Strong, Unowned? (0) | 2022.02.24 |
|---|---|
| [내용정리] Swift - 옵셔널(Optional)이란? (0) | 2022.02.15 |
| [내용정리] Swift - JsonArray와 JsonObject의 차이 (0) | 2022.02.03 |
| [내용정리] Swift - closure(클로저)란? (1/2) (0) | 2022.02.03 |
| [내용정리] Swift - UITableVIew Delegate, DataSource 종류 (0) | 2022.01.26 |