728x90
반응형
지난 글에 이어 클로저에 대해 더 자세히 들여다보는 시간을 가져보려한다.
여러 클로저 표현
기본 클로저 표현
func calculate(x: Int, y: Int, method: (Int, Int) -> Int) -> Int {
return method(x, y)
}
이렇게 클로저를 작성하는 것은 이미 저번 글에서 확인했다.
후행 클로저(Trailing Closures)
함수 파라미터 마지막으로 전달되는 클로저는 후행 클로저로 함수 외부에 구현할 수 있다.
이는 마치 코틀린 SAM(Single Abstract Method) 변환과 모습이 비슷해보인다.
var result: Int
result = calculate(x: 10, y: 10) { (left: Int, right: Int) -> Int in
return left + right
}
print(result)
리턴타입 생략(Inferring Type From Context)
result = calculate(x: 10, y: 10, method: { (left: Int, right: Int) in
return left + right
})
print(result)
result = calculate(x: 10, y: 10) { (left: Int, right: Int) in
return left + right
}
print(result)
코드를 보면 알겠지만 위 result는 후행 클로저를 사용하지 않은 예시이고
아래 result는 후행 클로저를 사용한 예시이다.
Int와 Int를 더하면 Int타입을 반환할 것을
컴파일러가 예측할 수 있기 때문에 이렇게 리턴타입을 생략할 수 있다.
단축 인자이름(Shorthand Argument Names)
result = calculate(x: 10, y: 10, method: {
return $0 + $1
})
print(result)
result = calculate(x: 10, y: 10) {
return $0 + $1
}
print(result)
클로저의 파라미터 이름을 사용하지 않는 경우, 파라미터 순서대로 $0, $1 ... 과 같이 표현할 수 있다.
(개인적으로 나는 잘 쓰지 않을 것 같다.)
암시적 반환 표현(Implicit Returns from Single-Expression Closures)
result = calculate(x: 10, y: 10) {
$0 + $1
}
print(result)
result = calculate(x: 10, y: 10) { $0 + $1 }
print(result)
클로저의 리턴이 존재하는 경우, 마지막 줄의 결과값이 암시적으로 반환값으로 취급된다.
개인적인 생각
클로저는 코틀린의 람다와 비슷한 느낌을 준다.
다만, 축약의 여지가 많은 문법이기에
너무 욕심을 내어 축약시키다보면 다른 사람이 코드를 읽을 때 곤혹스러울 수 있을 것 같다.
728x90
반응형
'Language > Swift' 카테고리의 다른 글
Swift - 프로퍼티(Properties) (0) | 2024.11.21 |
---|---|
Swift - 클로저(Closures) - 1 (2) | 2024.11.14 |
Swift - Class, Struct, Enum 비교하기 (0) | 2024.05.13 |
Swift - 열거형(Enum) (0) | 2024.05.12 |
Swift - 클래스(Class) (0) | 2023.12.05 |