[Swift] 클로저(Closure) - 1

팔랑이·2023년 6월 9일
0
post-thumbnail

23-05-17

파이썬의 람다(lambda) 같은 놈이라고 함.

정렬 메소드

sorted by(:) 메소드와 클로저를 이용해 배열을 정렬
(String, String) -> Bool 타입의 클로저를 사용

let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]

func backward(_ s1: String, _ s2: String) -> Bool{
    return s1>s2
}
var reversedNames = names.sorted(by: backward)

클로저 함수 문법

일반적으로 다음과 같이 사용한다.

{ (parameters) -> return type in 
    statements
}

위의 코드에서 in 앞을 클로저 헤드, 뒤를 클로저 바디라고 함.
위 정렬 메소드를 다음과 같이 짧게 표현할 수 있음.

reversedNames = names.sorted(by: {(s1: String, s2: String) -> Bool in
    return s1>s2
})

문맥에서 타입 추론

sorted (by:)의 메소드에서 이미 (String, String)->Bool 이 들어와야 되는 것을 알기 때문에 이를 생략하여 더 짧게 표현할 수도 있음.

reversedNames = names.sorted(by: {s1, s2 in return s1>s2})

단일 표현 클로저에서의 암시적 반환

단일 표현 클로저에서는 반환 키워드 (return)도 생략 가능.
클로저 내부에 return 구문이 하나만 있을 경우를 말한다.

reversedNames = names.sorted(by: s1, s2 in s1 > s2)

인자 이름 축약

인자 값을 순서대로 $0, $1, $2 등으로 사용 가능. 다음과 같이 표현한다.

reversedNames = names.sorted(by: {$0 > $1})

이와 같이 $와 인덱스를 이용헤 Parameter에 순서대로 접근하는 것을 Shorthand Argument Names라고 함.

연산자 메소드

가장 짧게 줄이려면 String 끼리 비교할 수 있는 비교연산자 (>) 을 사용해 다음과 같이 짧게 표현 가능.

reversedNames = names.sorted(by: >)

위와 같이 클로저를 활용해 코드의 길이를 극단적으로 줄일 수 있다.

그러나 코드를 이해하기 어려워진다는 단점이 있음.


📚 참고도서
[SwiftUI 기반의 iOS 프로그래밍]

profile
정체되지 않는 성장

0개의 댓글