[SwiftUI] ContentView 란 녀석의 특징 및 메서드 체이닝이란?
프로젝트를 생성하면 기본적으로 만들어지는 ContentView.swift파일의 코드 내용은 아래와 같습니다.
import SwiftUI
struct ContentView: View {
var body: some View {
Text("Hello, SwiftUI world!")
}
}
구조체는 상속받을 수 없는데 View를 상속받고 있는 것처럼 코딩되어 있음
Command 키를 누른 상태에서 View를 클릭하면 다음과 같은 코드 내용을 볼 수 있어요
기존의 UIView와 달리 프로토콜로 선언되어 있습니다.
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
public protocol View {
/// The type of view representing the body of this view.
///
/// When you create a custom view, Swift infers this type from your
/// implementation of the required ``View/body-swift.property`` property.
associatedtype Body : View
/// The content and behavior of the view.
///
/// When you implement a custom view, you must implement a computed
/// `body` property to provide the content for your view. Return a view
/// that's composed of primitive views that SwiftUI provides, plus other
/// composite views that you've already defined:
///
/// struct MyView: View {
/// var body: some View {
/// Text("Hello, World!")
/// }
/// }
///
/// For more information about composing views and a view hierarchy,
/// see <doc:Declaring-a-Custom-View>.
@ViewBuilder var body: Self.Body { get }
}
ContentView
- class가 아닌 struct로 시작하는 구조체로 시작
- SwiftUI에서는 화면을 구성하는 커스텀 뷰를 만들 때 반드시 이 뷰 프로토콜을 준수해야함.
- 읽기전용인 body 연산프로퍼티만 필수로 구현하면 되는데 UIView클래스가 많은 수의 프로퍼티(사용목적과 관계없이 모든 프로퍼티를 보유하는 단점)를 가지는 것과 대조적임.
- SwiftUI 프레임워크에서는 각각의 뷰 객체가 자신에게 필요한 속성만으로 뷰를 생성하다록 구현됨
SwiftUI 메서드 체이닝
다음 샘플 코드에서 처럼 보는 바와 같이 Text() 메서드 뒤에 font, multilineTextAlignment, foregroundColor등 연쇄적인 메서드 호출을 뜻합니다.
struct ContentView: View {
var body: some View {
VStack {
Text("Hello, SwiftUI world!")
.font(.title)
.multilineTextAlignment(.center)
.lineLimit(0)
.padding()
.foregroundColor(.green)
HStack {
Text(/*@START_MENU_TOKEN@*/"Placeholder"/*@END_MENU_TOKEN@*/)
Spacer()
Text("Merong~~~")
.font(.largeTitle)
}
}
}
}
위 포스팅 내용들은 "스윗한 SwiftUI(이봉원 지음)" 전자책을 보고 스터디 및 실습한 내용들을 기록하였습니다.