본문 바로가기
Swift

Swift: Result Builder

by songmoro 2024. 8. 13.
728x90

Result Builder

자연스럽고 선언적인 방식으로 목록이나 트리와 같은 중첩된 데이터를 만들기 위한 도메인별 언어(DSL)를 구현할 수 있게 해 준다.

Class, Struct, Enum 타입 등에 사용할 수 있다.

 

Result Builder Method

  • static func buildBlock(_ components: Component...) -> Component
    • 부분 결과의 배열을 하나의 결과로 결합한다.
  • static func buildPartialBlock(first: Component) -> Component
    • first 요소로부터 부분 결과 요소를 만든다.
    • buildBlock(_:)와 비교하면, 다른 수의 인수를 처리하는 오버헤드를 줄인다.
  • static func buildPartialBlock(accumulated: Component, next: Component) -> Component
    • 축적된(accumulated) 요소와 새로운 구성 요소와 결합하여 부분 결과 요소를 만든다.
    • reduce와 비슷한 맥락
  • static func buildOptional(_ component: Component?) -> Component
    • 옵셔널 부분 요소로부터 부분 요소를 만든다.
    • else 구문을 포함하지 않는 if 조건문을 만들기 위해 사용한다.
  • static func buildEither(first: Component) -> Component
    • 조건에 따라 값이 달라지는 부분 결과 요소를 만든다.
    • switch, if-else를 지원하기 위해 사용한다.
  • static func buildEither(second: Component) -> Component
    • 위 동
  • static func buildArray(_ components: [Component]) -> Component
    • 부분 결과의 배열에서 부분 결과 요소를 만들기 위해 사용한다.
    • for 반복문을 지원한다.
  • static func buildExpression(_ expression: Expression) -> Component
    • 표현식(expression)으로부터 부분 결과를 만들기 위해 사용한다.
    • 예를 들어, 표현식을 내부 타입으로 변환하는 등 전처리를 수행하거나, 타입 추론을 위한 추가 정보를 제공하기 위해 사용할 수 있다.
  • static func buildFinalResult(_ component: Component) -> FinalResult
    • 부분 요소로부터 최종 결과를 만든다.
    • 이 메서드를 부분 혹은 최종 결과에 대해 다른 타입을 사용하는 result builder의 일부로 구현하거나 결과를 반환하기 전에 다른 후처리를 수행할 수 있다.
  • static func buildLimitedAvailability(_ component: Component) -> Component
    • 가용성 검사를 수행하는 compiler-control 외부에서 타입 정보를 전달하거나, 제거하는 부분 요소를 만든다.
    • 이 메소드를 사용하여 조건부 분기마다 다른 타입 정보를 지울 수 있다.

 

 

 

 

참고

resultBuilder

Result Builders

 

 

728x90

'Swift' 카테고리의 다른 글

Swift: Attributes  (0) 2024.08.22
Swift: Network 프레임워크  (0) 2024.08.17
Swift: 이벤트 큐, 이벤트 핸들러  (0) 2024.08.12
Swift: Async, Await, Thread  (0) 2024.08.12
Swift: OperationQueue  (0) 2024.08.12