티스토리 뷰

🍏/SwiftUI + Combine

[SwiftUI] @ViewBuilder 와 AnyView

사용자 eungding 2021. 8. 19. 12:12
728x90
반응형
enum Type {
    case A
    case B
}

struct AView: View {
    var body: some View {
        EmptyView()
    }
}

struct BView: View {
    var body: some View {
        EmptyView()
    }
}

 

#  single return type

 

이렇게 각 타입에 맞게 다른 뷰를 리턴해주면 컴파일 에러가 난다.

Swift는 function에 대해 single return type을 요구하기 때문이다. 

 

 

# AnyView , Group 

 

그래서 AnyView로 감싸서 쓴다. 

 

 

참고로 AnyView는 return을 생략하고 쓸 수는 없다. 

 

 

 

또는 Group을 이용하는 방법도 있다. 

 

 

 

# @ViewBuilder 

 

WWDC 2021 - Demystify SwiftUI 에서는 @ViewBuilder를 사용하기를 권장한다.

 

 

@ViewBuilder는 여러 logic single statements 으로부터 single generic view를 구성하도록 해주며,

이미 SwiftUI의 여러곳에서 쓰이고 있다.

 

View 프로토콜의 body 앞에도 붙어있고 

 

 

 

VStack의 content 앞에도 붙어있다. 

 

 

그리고 사실상 위에서 쓴 Group의 content 앞에도 @ViewBuilder가 붙어있었기 때문에

저렇게 쓸 수 있는 것이다. 

 

 

 

# AnyView는 Not Recommended! 

 

또한 코드를 이해하기 힘들며 퍼포먼스가 안좋을 수 도 있는 AnyView는 안쓰기를 권장한다. 

 

 

나의 예제는 너무 심플해서 못느낄 수 있지만  WWDC에서 보여주신 예제는

확실히 읽기 어렵다. 

 

 

 

@ViewBuilder를 쓴 버전이 훨씬 간단! 

 

 

 

Reference

 

https://developer.apple.com/videos/play/wwdc2021/10022/

 

Demystify SwiftUI - WWDC21 - Videos - Apple Developer

Peek behind the curtain into the core tenets of SwiftUI philosophy: Identity, Lifetime, and Dependencies. Find out about common patterns,...

developer.apple.com

 

728x90
반응형
댓글
댓글쓰기 폼