일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- SWiFT
- 큐
- web
- pwnable.kr
- 스택
- 재귀
- level13
- 파일 시스템
- 미로 탐색 알고리즘
- War Game
- OSI
- 자료구조
- Stack
- PHP
- c언어
- windosws wbcs
- ftz
- System
- 파이썬
- LoB
- windosw 문자열
- HTML
- ftz level13
- 정렬 알고리즘
- Java
- 암호수학
- 시간복잡도
- 백준
- 두근두근 자료구조
- C
- Today
- Total
나의 기록, 현진록
[Swift] 13.3 클로저 표현 간소화 / 타입 유추 / 단축 인자 / 암시적 반환 / 연산자 함수 본문
[Swift] 13.3 클로저 표현 간소화 / 타입 유추 / 단축 인자 / 암시적 반환 / 연산자 함수
guswlsdk 2021. 7. 28. 11:42스위프트 프로그래밍 3판 - 야곰 지음
13.3.1 문맥을 이용한 타입 유추
메서드의 전달인자로 전달하는 클로저는 메서드에서 요구하는 형태로 전달해야 합니다. 즉, 매개변수의 타입이나 개수, 반환 타입 등이 같아야 전달인자로서 전달할 수 있습니다. 이를 다르게 말하면, 전달인자로 전달할 클로즈는 이미 적합한 타입을 준수하고 있다고 유추할 수 있습니다. 문맥에 따라 적절히 타입을 유추하는 것입니다. 그래서 전달인자로 전달하는 클로저를 구현할 때는 매개변수의 타입이나 반환 값의 타입을 굳이 표현해주지 않고 생략하더라도 문제가 없습니다.
let names: [String] = ["wizplan", "eric", "hyunjin", "jenny"]
//클로저의 매개변수 타입과 반환 타입을 생략하여 표현할 수 있습니다.
let reserved: [String] = names.sorted { (first, second) in
return frist > second
}
13.3.2 단축 인자 이름
계속해서 sorted(by:) 메서드로 전달하는 클로저를 살펴보면 또 하나 마음에 들지 않는 점이 있습니다. 바로 의미없어 보이는 두 매개변수 이름입니다. 스위프트는 조금 멋스럽고 간결하게 표현할 수 있도록 단축 인자 이름을 제공합니다.
단축 인자 이름은 첫 번째 전달인자부터 $0, $1, $2, $3, ... 순서로 $와 숫자의 조합으로 표현합니다. 단축 인자 표현을 사용하게 되면 매개변수 및 반환 타입과 실행 코드를 구분하기 위해 사용했던 키워드 in을 사용할 필요도 없어집니다.
let names: [String] = ["wizplan", "eric", "hyunjin", "jenny"]
// 단축 인자 이름을 사용한 표현
let reversed: [String] = names.sorted{
return $0> $1
}
13.3.3 암시적 반환 표현
점점 간결해지고 있는 클로저 표현을 보고 있습니다. 아직 끝이 아닙니다. return 키워드마저 줄일 수 있습니다.
만약 클로저가 반환 값을 갖고 있는 클로저이고 클로저 내부의 실행문이 단 한 줄이라면, 암시적으로 그 실행문을 반환 값으로 사용할 수 있습니다.
let names: [String] = ["wizplan", "eric", "hyunjin", "jenny"]
// 암시적 반환 표현의 사용
let reversed: [String] = names.sorted{ $0 > $1 }
13.3.4 연산자 함수
비교 연산자는 두 개의 피연산자를 통해 Bool 타입의 반환을 줍니다. 우리가 sorted(by:) 메서드에 전달한 클로저와 동일한 조건입니다. 클로저는 매개변수의 타입과 반환 타입이 연산자를 구현한 함수의 모양과 동일하다면 연산자만 표기하더라도 알아서 연산하고 반환합니다. 연산자는 일종의 함수이다. 다음은 연산자의 정의이다.
public func > <T : Comparable>(lhs: T, rhs: T) -> Bool
func 키워드이다. 함수는 클로저의 일종이다. > 자체가 함수의 이름이라는 것이다.
let names: [String] = ["wizplan", "eric", "hyunjin", "jenny"]
// 연산자 함수를 클로저의 역할로 사용
let reversed: [String] = names.sorted(by: >)
'Programming > Swift' 카테고리의 다른 글
[Swift] Baekjoon 20300 서강근육맨 (0) | 2021.09.09 |
---|---|
[Swift] 13.4 값 획득 (0) | 2021.09.07 |
[Swift] 13. 클로저 / 기본 클로저 / 후행 클로저 (0) | 2021.07.27 |
[Swift] 11.2 인스턴스 소멸 (0) | 2021.07.26 |
[Swift] 11.1.5 기본 이니셜라이저와 멤버와이즈 이니셜라이저 / 초기화 위임 / 실패 가능한 이니셜라이저 (0) | 2021.07.26 |