개발삽질기/iOS

ViewBuilder가 뭐지?

세밍_ 2023. 6. 30. 11:01
728x90
반응형

ViewBuilder는 @ViewBuilder로 사용하는데, 복수의 뷰를 가지고 새로운 복합뷰를 생성할 수 있는 클로져를 정의할때 사용된다고 한다. 

Swift의 DSL(Domain Specific Language)구문을 사용해서 여러뷰를 조합하고 조건부 뷰를 작성하는 등의 기능을 가능하게 한다고 한다. 

여기서 Swift의 DSL은 선언적 UI 구조를 정의하기 위한 언어로, Swift의 DSL을 사용하면 UI의 구조와 동작을 명확하고 간결하게 표현할 수 있다고 한다. 

아래처럼 조건에 따라 달라지는 경우, 뷰를 다르게 보여줄 수 있다. 

그렇다면 일반적인 Button , text는 뭐란 말일까? SwiftUI에서는 ViewBuilder 없이 그냥 View가 만들어진다.

자세히 봤더니 Button에는 ViewBuilder 특성이 이미 존재하고, ViewBuilder 텍스트 자체만 생략되어 있었던 것이다. 

Button View 외에도 HStack, List, TabView 등 컨테이너 View도 모두 @ViewBuilder 특성을 통해 사용자가 클로저에 복수의 View를 선언할 수 있도록 지원한다.

 

View 프로토콜의 body 프로퍼티 선언에도 @ViewBuilder 특성이 붙어 있어서 View 상속을 받는 모든 사용자 정의 View의 body에 @ViewBuilder를 붙이지 않아도 클로저 내에서 복수의 View 선언이 가능한 것이다!

 

그럼 ViewBuilder는 언제 직접 사용할까?

ViewBuilder를 사용해서 정의된 컨테이너 View를 만들 수 있다. 

HStack 정의는 다음과 같다.

위 정의에서 spacing 기본값을 20으로 변형한 Hstack을 구현해볼 수 있다.

위처럼 구현을 했을때 SpaceHStack으로 어디서든 사용이 가능하다.

 

 

728x90
반응형