-
[Swift] Swift 기본 문법 정리 3: 클로저Swift 2022. 12. 21. 15:52
Swift 기초 2
2022.12.16 - [Swift] - [Swift] Swift 기본 문법 정리 2: 함수
[Swift] Swift 기본 문법 정리 2: 함수
Swift 기초 1 2022.12.15 - [Swift] - [Swift] Swift 기본 문법 정리 1 [Swift] Swift 기본 문법 정리 1 Mac에서 Swift 시작하기 mac에서 ios 개발을 위해서는 기본적으로 맥북에 제공되는 xcode를 통해 가능하다. (없는
moon-works.tistory.com
시작하며
javascirpt에서의 closure를 생각하고 공부한 closure는 그 기능이 많이 달랐다. closure의 유무는 코드를 더 간결하고 우아하게 만드는 것처럼 보였다. 아직 기초이지만 closure의 활용이 기대가 된다.
클로저
클로저는 다른 언어에서와 같이 특정 context에 대한 캡쳐된 정보를 가지고 있다. 클로저는 다른 함수와 다르게 이름이 없지만 파라미터와 반환값이 존재한다. 일반 함수 역시 클로저이지만 이름이 있고 상위 함수가 있는 클로저이지만 여기서의 클로저는 추론과 축약된 인자를 통한 경량화된 문법을 가진 클로저 표현이다.
클로저 기본 문법
{( 파라미터 ) -> 리턴타입 in ... }
- 여기서의 in 은 리턴타입과 statement를 구분해주는 클로저 표현이다.
클로저를 통한 축약
타입 추론
기존 함수가 정의된 타입을 통한 차입 추론을 통해 parameter와 return 값의 타입을 추론해서 생략이 가능하게 한다.
func sendMessage() -> (String) ->String { return { (name: String) -> String in return "good morning" + name } } func sendEmail() -> (String) ->String { return { (to) in "mail to" + to } } let message = sendMessage() print(message("austin")) let mail = sendEmail() print(mail("moonkey"))
인자 이름 축약
Swift에서는 받는 파라미터의 이름을 $0, $1, $2 ..와 같이 받는 순서에 따라 축약해서 사용할 수 있다. 파라미터와 in, return 모두 생략할 수 있다.
func sendPaper() -> (String) -> String { return { "give paper to " + $0 } } // give paper to moon let paper = sendPaper() print(paper("moon"))
후행 클로저
만약 인자로 클로저를 전달하는데 클로저가 너무 길 경우 함수 호출 () 이후에 클로저를 붙여서 사용할 수 있다.
let numbers = [1, 3, 2, 6, 7, 5, 8, 4] //let sortedNumbers = numbers.sorted({ $0 < $1 }) let sortedNumbers = numbers.sorted() { $0 < $1 } print(sortedNumbers)
클로저 활용
array 등의 기본 메소드에 클로저를 넘겨줄 때 유용하게 활용할 수 있다.
let numbers = [1, 3, 2, 6, 7, 5, 8, 4] let sortedNumbers = numbers.sorted() { $0 < $1 } print(sortedNumbers) let evenNum = numbers.filter() { $0 % 2 == 0 } print(evenNum) let doubleNums = numbers.map() { $0 * 2 } print(doubleNums) //2배 let sum = numbers.reduce(0) { $0 + $1} print(sum)
'Swift' 카테고리의 다른 글
[Swift] Swift 기본 문법 정리 5: Property (0) 2023.02.01 [Swift] Swift 기본 문법 정리 4: Protocol 📑 (0) 2023.01.30 [Swift] Swift 기본 문법 정리 5-1: 왜 Swift에는 Sturct와 Class로 나뉘어 있을까. (0) 2022.12.26 [Swift] Swift 기본 문법 정리 2: 함수 (0) 2022.12.16 [Swift] Swift 기본 문법 정리 1: Xcode Setting, types (0) 2022.12.15