View
앱 UI의 일부분을 표시하고 뷰를 구성하는데 사용되는 modifier를 제공하는 타입
원문 출처 https://developer.apple.com/documentation/swiftui/view
Summary
SDKs
iOS 13.0+
macOS 10.15+
Mac Catalyst 13.0+
tvOS 13.0+
watchOS 6.0+
Xcode 11.0+
Framework
SwiftUI
Declaration
protocol View개요
View 프로토콜을 따르는 타입을 선언함으로써 커스텀 뷰를 생성할 수 있습니다. body라는 계산된 속성(Computed property)을 구현하여 커스텀 뷰에 컨텐츠를 제공하세요.
struct MyView: View {
    var body: some View {
        Text("Hello, World!")
    }
}위 예제의 Text 인스턴스처럼 SwiftUI에서 제공하는 하나 이상의 기본 뷰를 뷰 계층으로 결합하여 뷰의 body를 조합하세요.
View 프로토콜은 default 구현과 함께 프로토콜 메서드로 정의된 수정자 set을 제공합니다. 이 수정자 셋은 앱 레이아웃 내에서 뷰를 설정하고 위치를 조정하는데 사용됩니다. 수정자는 일반적으로 다른 뷰 내에서 특정하여 호출될 수 있도록 뷰 인스턴스를 감싸는 방식으로 동작합니다. 예를들어, text 뷰에 opacity(_:) 수정자를 추가함으로써 투명도가 적용된 새로운 뷰를 반환받을 수 있습니다.
Text("Hello, World!")
    .opacity(0.5)  // Display partially transparent text.수정자의 효과는 자식뷰로 전파되어, 자식 뷰에서 명시적으로 오버라이드하지 않는 한 같은 효과가 적용됩니다. 예를 들어, 다른 뷰를 세로로 쌓는 역할만 하는 VStack은 자체적으로 표시할 텍스트가 없습니다. 그러므로 font(_:) 수정자를 스택에 적용하여도 스택 그 자체에는 아무런 효과가 없습니다. 그러나 스택의 자식 뷰에는 적용이 되며, 특정 자식 뷰에서 스택의 수정자를 오버라이드하는 것도 가능합니다:
VStack {
    Text("Title")
        .font(.headline)  // 이 뷰에 한해 폰트를 오버라이딩 합니다.
    Text("First body line")
    Text("Second body line")
}
.font(.body)  // 이 스택의 기본 폰트를 설정합니다.이전의 결과를 래핑하는 수정자 체인은 흔히 사용됩니다. 예를 들어, 텍스트 뷰에 너비가 지정된 frame(width:height:alignment:) 수정자를 사용해서 레이아웃을 잡은 다음, border(_:width) 수정자로 윤곽을 그릴 수 있습니다:
Text("Title")
    .frame(width: 100)
    .border(Color.gray)수정자를 적용하는 순서가 중요합니다. 예를 들어, 위 예제 코드의 border는 frame의 전체 길이에 맞추어 윤곽을 그립니다.

만약 border가 먼저 적용된다면 윤곽은 text view를 따라 그려지게 되며 텍스트를 렌더링하는데 필요한 공간 이상으로 커지지 못할 것입니다.
Text("Title")
    .border(Color.gray)  // border가 먼저 적용됩니다.
    .frame(width: 100)100 포인트 너비의 보이지 않는 다른 뷰에 감싸는 것은 복합 뷰의 레이아웃에는 영향을 미치겠지만 border에는 아무런 효과가 없습니다.

주제
커스텀 뷰 구현
- var body: Self.Body 뷰의 동작과 컨텐츠 필수. 기본 구현이 제공됩니다 
뷰  설정
- 레이아웃 계층구조 내의 뷰에 크기, 위치, 정렬, 패딩 등을 조정함으로써 뷰 자신의 위치를 잡는 방식을 알려줍니다. 
- 접근성 장애인을 포함한 가능한 많은 사람들이 접근 가능한 뷰를 만들어보세요. 
- 렌더링 스케일링, 마스킹 또는 그래픽 효과를 적용하는 등 시스템이 뷰를 그리는 방식에 변화를 줄 수 있습니다. 
- 스타일링 뷰에 포함되는 텍스트, 컨트롤, 기타 컨텐츠에 적용할 스타일을 지정하세요. 
상호작용성 제공
- 입력과 이벤트 사용자 입력과 시스템 이벤트에 반응하도록 뷰에 동작을 제공하세요. 
- 뷰 표현 특정 조건에서 보여질 수 있는 부가적인 뷰를 정의하세요. 
- 상태 뷰 설정값에 접근하고 구성 데이터로 자식 뷰를 제공하세요. 
Xcode에서 Preview 구성하기
- func previewDevice(PreviewDevice?) -> View Preview의 장치를 재정의합니다. 
- func previewDisplayName(String?) -> View 에디터에서 사용자에게 보여질 이름을 제공합니다. 
- func previewLayout(PreviewLayout) -> View Preview 컨테이너의 크기를 재정의합니다. 
뷰 식별하기
- func id<ID>(ID) -> View 삽입, 삭제가 가능하며 유일하게 식별되는 뷰를 생성합니다. 
- func equatable() -> EquatableView<Self> 새 값이 기존 값과 동일할 때 뷰가 자식뷰를 업데이트 하지 않도록 합니다. Self가 Equatable을 준수할 때 사용가능합니다. 
- associatedtype Body 뷰의 본문을 나타내는 뷰 타입 필수 
뷰 modifier 구현하기
- func modifier<T>(T) -> ModifiedContent<Self, T> 수정자를 뷰에 적용합니다. 
- struct ModifiedContent 수정자가 적용된 값 
- struct EmptyModifier 비어있거나 식별되는 수정자 
관련 문서
Inherited By
- DynamicViewContent 
- NSViewControllerRepresentable 
- NSViewRepresentable 
- Shape 
- UIViewControllerRepresentable 
- UIViewRepresentable 
- WKInterfaceObjectRepresentable 
Confirming Types
- AngularGradient 
- AnyView 
- Button 
- ButtonStyleConfiguration.Label 
- Color 
- DatePicker 
- Divider 
- EditButton 
- EmptyView 
- EquatableView 
- ForEach 컨텐츠가 View를 준수하면 준수합니다. 
- Form 
- GeometryReader 
- Group 컨텐츠가 View를 준수하면 준수합니다. 
- GroupBox 
- HSplitView 
- HStack 
- Image 
- LinearGradient 
- List 
- MenuButton 
- ModifiedContent 컨텐츠가 View를 준수하고 modifier가 viewModifier를 준수하면 준수합니다. 
- NavigationLink 
- NavigationView 
- Never 
- Optional 옵셔널이 View를 준수하면 준수합니다. 
- PasteButton 
- Picker 
- PrimitiveButtonStyleConfiguration.Label 
- RadialGradient 
- ScrollView 
- Section 부모, 컨텐츠, Footer가 모두 View를 준수할 때 준수합니다. 
- SecureField 
- Slider 
- Stepper 
- SubscriptionView 
- TabView 
- Text 
- TextField 
- Toggle 
- ToggleStyleConfiguration.Label 
- TupleView 
- VSplitView 
- VStack 
- ZStack 
같이 보기
Essentials
- 뷰의 생성과 조합 이 튜토리얼은 여러분이 좋아하는 장소를 발견하고 공유하는 Landmarks라는 iOS 앱을 만들면서 진행됩니다. 여러분은 랜드마크의 상세정보를 보여주는 화면을 구성하는 것부터 시작하게 될 것입니다. 
- UI 컨트롤로 작업하기 Landmarks 앱에서는 사용자가 프로필을 작성함으로써 개성을 표현할 수 있습니다. 사용자들에게 자기 자신의 프로필을 수정할 수 있는 기능을 제공하기 위해서 여러분들은 편집모드를 추가하고 설정 화면을 디자인하게 될 것입니다. 
Last updated
