1. some View
- "반환값이 View다" 정도로만 보면 부족하다
- 정확히는 "컴파일러는 이 함수가 반환하는 구체적인 View 타입을 알고 있지만, 바깥에는 숨긴다"
- 핵심은 하나의 구체 타입이 정해져 있다는 점
- 예를 들어 내부가 Text든 VStack이든 modifier가 붙은 복잡한 타입이든, 컴파일 시점에는 이미 확정되어 있다.
- 그래서 some View는 타입 정보를 유지한다.
2. any View
- "이 값은 View 프로토콜을 따르는 값이다."
- View 프로토콜을 채택한 어떤 타입의 인스턴스든 담을 수 있다.
- some View가 "구체 타입은 잇지만 숨김" 이라면, any View는 "구체 타입을 하나로 고정하지 않고, View 프로토콜을 따르는 값을로 다룸"에 가깝다.
- 그래서 타입 정보가 더 추상화된다.
/// some View
let a: some View = Text("Hello")
/// any View
let b: any View = Text("Hello")
- a는 내부적으로 구체 타입이 확정된 상태 (Text)
- b는 Text라는 구체 타입보다는 "View를 따르는 값"으로 다루는 쪽
즉, any View는 View 프로토콜을 만족하는 임의의 값을 프로토콜 타입으로 다루는 방식.
3. AnyView
- 이건 SwiftUI가 제공하는 타입 소거 Wrapper
- 서로 다른 구체 View 타입을 하나의 공통 타입으로 감싸서 다룰 수 있게 함
- 예를 들어 Text와 Image를 같은 반환 타입으로 맞춰야 할 때 AnyView(Text(...)), AnyView(Image(...))처럼 감쌀 수 있음
- 대신 감싸는 순간 원래의 구체 타입 정보는 잃음
한 줄로 비교하면 이렇습니다.
- some View: 구체 타입은 있음, 다만 감춤
- any View: View 프로토콜 자체를 값처럼 다룸
- AnyView: SwiftUI에서 View를 실제로 타입 소거해서 담는 박스
그리고 사용 감각은 보통 이렇게 가져가면 됩니다.
- 기본은 some View
- any View는 Swift 언어 개념을 이해할 때
- AnyView는 정말 여러 View 타입을 하나로 묶어야 할 때만
오해하기 쉬운 부분 하나만 더 짚으면,
some View는 “뷰 컨테이너로 묶인다”가 본질은 아닙니다. 그건 @ViewBuilder 쪽 설명에 더 가깝습니다.
- some View는 반환 타입을 감추는 방식
- @ViewBuilder는 여러 뷰나 if 분기를 하나의 View 문맥으로 조립하는 방식
즉:
- some View = 반환 타입의 성격
- @ViewBuilder = body 내부 코드를 조립하는 방식
'Tech Log > iOS' 카테고리의 다른 글
| "별의 하모니" 개인정보 처리방침 (0) | 2026.04.16 |
|---|---|
| "별의 하모니" 지원 (0) | 2026.04.16 |
| AppEntity 에러로 이해한 Swift Concurrency: nonisolated vs MainActor.run (0) | 2026.03.10 |
| iOS ActivityKit 정리: Live Activity를 이론부터 프로젝트 적용까지 이해하기 (0) | 2026.03.04 |
| [WidgetKit] Weather Widget 학습 정리: TimelineEntry부터 AppIntent 인터랙션까지 (0) | 2026.02.26 |