SwiftUI에서 어떠한 view는 View 프로토콜을 준수해야 한다

protocol View {
	associatedtype Body: View
    	var body: Self.Body { get }
}

 

=> 프로토콜을 보면 알 수 있듯, 필수로 구현해 줘야 하는것은 연산프로퍼티인 읽기 전용 body 임을 알 수 있음

 

Text, Image, Color, Stack, Group, GeometryReader 등의 컨텐츠나 컨테이너 뷰에는 더이상 Body를 호출하지 않게 Never 타입을 사용

typealias Body = Never

 

1. 선언형

명령형 vs 선언형

명령형

UIKit 의 경우 명령형 선언으로써, 방법(How)에 초점을 두어 코드를 서술한다.

1) 버튼을 생성

2) 버튼의 제목 설정

3) 버튼 제목의 색상 설정

4) 폰트 지정

5) 버튼 클릭시 호출할 메서드 지정

6) 루트 뷰에 자식 뷰를 추가

7) 버튼을 화면 가운데로 배치

 

선언형

SwiftUI의 경우 선언형 선언으로써, 무엇(What)에 초첨을 두어 코드를 서술

Button(action: {
	print("Hello, SwiftUI")
}) {
	Text("SwiftUI")
    	.font(.title)
        .foregroundColor(.black)
}

=> 버튼을 생성하는데 버튼의 글자는 "SwiftUI" 이고, 폰트는 title, 색상은 검정색, 클릭했을때는 "Hello, SwiftUI"를 출력해줘

 

2. 자동화

=> 가능한 많은 기능이 자동으로 수행될 수 있게 제공하는것

자동화를 통하여 화면에 뷰를 배치할 오토 레이아웃 코드를 제거하고 최소한의 설명으로 적용할 수 있게 되었음

3.  조합

=> 큰 뷰를 하나의 기능을 가진 작은 뷰들로 잘게 나누거나 각각의 뷰를 조합해 원하는 뷰를 쉽게 만들어 낼수 있게 지원

4. 일관성

=> 데이터와 동기화되어 일관성 있게 보여줘야함

1) 데이터가 변경되면 그에 맞게 UI도 변경되어야함

2) 데이터가 변경되는 즉시 UI도 자동 갱신

3) 뷰의 특정 상태를 저장할 State / 모델 객첼의 변화를 관찰할 ObservableObject 로 인하여 데이터의 변화를 감지, UI 갱신

 

+ Recent posts