Notice
Recent Posts
Recent Comments
Link
슈프림 블로그
[Swift] Closure 클로저가 도대체 뭔데? 본문
728x90
Swift에서 함수형 프로그래밍 패러다임을 접할 때 클로저를 잘 이해해야 명확하게 이해할 수 있다.
- Swift의 클로저는 다른 언어의 **람다(Lambda)**와 유사하다
- 일정 기능을 하는 코드를 하나의 블록으로 ({} 안에) 모아 놓은 것.
- 함수도 클로저의 한 형태이다.
- 변수나 상수를 클로징한다 : 변수나 상수가 선언된 위치에서 참조를 획득하고 저장할 수 있다.
클로저 표현
{ (매개변수...) -> 반환타입 in
실행 코드
}
더보기
예시 ) String Type의 배열의 이름들을 담아 내림차순으로 정렬하는 코드
Swift 라이브러리의 sorted(by:) 메서드 정의
public func sorted(by areInIncreasingOrder: (Element,Element) -> Bool) -> [Element]
String 배열 선언
let names: String = ["Suhyun", "Jenny", "Yuna"]
메서드에 함수 전달
func backwards(first: String, second: String) -> Bool {
return first > second
}
let reversed = names.sorted(by: backwards)
print(reversed) // ["Yuna", "Suhyun", "Jenny"]
클로저 표현 예시
let reversed = names.sorted(by: { (first: String, second: String) -> Bool in
return first > second
}
후행 클로저
클로저가 맨 마지막 전달인자로 사용될 경우, 메서드의 소괄호를 닫고 사용해도 된다.
전달인자가 딱 하나일 경우, 소괄호까지 생략 가능하다.
더보기
// 마지막 인자이므로 소괄호를 닫고 사용
let reversed = names.sorted(){ (first: String, second: String) -> Bool in
return first > second
}
// 마지막 인자이므로 소괄호를 닫고 사용
let reversed = names.sorted(){ (first: String, second: String) -> Bool in
return first > second
}
클로저 표현 간소화
- 매개변수 타입과 반환 타입 생략 가능
- 단축 인자 이름 사용 : 매개변수의 순서에 따라 $0, $1, $2, ...
- 암시적 반환 표현 : 반환값이 있는 클로저이고, 실행 코드가 1줄이라면 return 키워드를 생략할 수 있다.
더보기
// 매개변수 타입과 반환 타입 생략
let reversed = names.sorted(){ (first, second) in
return first > second
}
// 단축 인자 이름 사용
let reversed = names.sorted(){ return $0 > $1 }
// return 키워드 생략
let reversed = names.sorted(){ $0 > $1 }
연산자 함수
(💡클로저와 다른 내용이지만 참고용💡)
<, > 등 비교 연산자도 함수의 일종이다.
매개변수 타입과 반환 타입이 같으므로 sorted(by:)의 인자값으로 넘겨줄 수 있다!
let reversed = names.sorted(by: >)
반응형
'iOS_Swift' 카테고리의 다른 글
[iOS/Swift] XCode 프로젝트에서 RealmSwift 사용하기 1 (0) | 2020.09.19 |
---|---|
[Swift] 객체를 추상화 하는 Struct와 Class 사용법, 차이는 무엇일까? (0) | 2020.08.30 |
[Swift] self, super 키워드 (0) | 2020.08.04 |
[Swift] 커스텀 객체 인스턴스를 비교하는 방법 (0) | 2020.08.04 |
객체지향 프로그래밍에 대하여.. Class & Object & Instance (0) | 2020.08.04 |
Comments