🍏/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/
반응형