티스토리 뷰
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
'🍏 > SwiftUI + Combine' 카테고리의 다른 글
[SwiftUI] iOS13에서 onChange(of:perform:) 을 사용하고 싶을 때 (2) | 2021.09.03 |
---|---|
[SwiftUI] @StateObject (0) | 2021.08.31 |
[SwiftUI] ZStack vs overlay modifier (2) | 2021.03.26 |
[SwiftUI] Custom Modifier 만들기 (0) | 2021.03.09 |
[SwiftUI] Button의 Tappable 영역 (1) | 2020.09.06 |
- Total
- Today
- Yesterday
- flutter build mode
- Django Firebase Cloud Messaging
- flutter dynamic link
- cocoapod
- flutter 앱 출시
- github actions
- 구글 Geocoding API
- Django FCM
- PencilKit
- Flutter Spacer
- ipad multitasking
- Flutter Text Gradient
- Dart Factory
- Flutter 로딩
- ribs
- Watch App for iOS App vs Watch App
- 플러터 얼럿
- 장고 Custom Management Command
- Flutter getter setter
- drf custom error
- flutter deep link
- Django Heroku Scheduler
- Python Type Hint
- METAL
- 플러터 싱글톤
- DRF APIException
- SerializerMethodField
- Flutter Clipboard
- Sketch 누끼
- 장고 URL querystring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |