Swift - 클로저(Closures) - 2

2024. 11. 15. 23:54·Study/Swift
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
반응형
저작자표시 비영리 변경금지 (새창열림)

'Study > 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
'Study/Swift' 카테고리의 다른 글
  • Swift - 프로퍼티(Properties)
  • Swift - 클로저(Closures) - 1
  • Swift - Class, Struct, Enum 비교하기
  • Swift - 열거형(Enum)
BonusTrack02.dev
BonusTrack02.dev
공부, 일상
  • BonusTrack02.dev
    BonusTrack02.dev
    BonusTrack02.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (237)
      • Dev experience (85)
        • Android (84)
        • Kotlin (1)
      • Study (62)
        • Kotlin (26)
        • Swift (17)
        • Java (19)
      • 프로그래머스 (68)
      • 주저리주저리 (22)
        • 카페 (5)
        • 음식점 (4)
        • 컨퍼런스 (1)
        • 팝업스토어 (4)
        • 전시회 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MVVM
    스위프트
    Observer
    배열
    getNumericValue
    Material
    room
    프로그래머스
    자바
    viewModelScope
    jetpack
    CodeLab
    LiveData
    databinding
    daterangepicker
    ios
    코루틴
    안드로이드
    오블완
    Kotlin
    티스토리챌린지
    programmers
    Java
    aac
    코틀린
    ViewModel
    PCCE
    android
    coroutines
    SWIFT
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BonusTrack02.dev
Swift - 클로저(Closures) - 2
상단으로

티스토리툴바