2023. 9. 5. 01:28ㆍApple/SwiftUI
SwiftUI 의 특성
1. 선언형 프로그래밍 ( Declarative programming)
⇒ User Interface 의 기능만 명시하면 됨!
⇒ 프로그램이 어떤 방법으로 해야하는지 나타내기보다 무엇이 같은지를 설명하는 경우 ‘선언형’ 이라고 한다.
반면, 명령형 프로그래밍은
알고리즘을 명시하고 목표는 명시하지 않는데 반해 선언형 프로그래밍은 목표를 명시하고 알고리즘을 명시하지 않는 것이다.
e.g.
- html 마크업언어로 만들어지는 웹페이지 구조도 선언형인데,
<h1>
,text
,<p>
,<img..>
인 경우 - 그 외
SQL
의SELECT 학생 FROM 야자반;
과 같이 무엇을 나타내야 하는지를 묘사하는 것이지, 어떤 방법으로 컴퓨터 화면에 페이지를 나타내야 하는지를 묘사하지 않는다.
import SwiftUI
struct AlbumDetail: View {
var album: Album
var body: some View {
List(album.songs) { song in
HStack {
Image(album.cover)
VStack(alignment: .leading) {
Text(song.title)
Text(song.artist.name)
.foregroundStyle(.secondary)
}
}
}
}
}
장점
코드가 간단하고, 가독성이 향상된다.
시간절약, 유지관리 용이
2. SwiftUI 가 제공하는 것들
- 제공되는 UI : views, controls, layout structures
- framework
- event handler, App Model - tap, gestures, 기타 유형 input 을 App 에 전달
⇒ 사용자가 상호작용하고 보기위한 view 와 control 까지의 Data Flow 관리하는 도구를 제공한다.
3. App 구조
App 프로토콜을 사용해 앱 구조를 정의하고 앱의 UI 를 구성하는 View 가 포함된 장면으로 앱 구조를 채운다
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
Text("Hello, world!")
}
}
}
View : 앱 UI의 일부를 나타내고 view 를 구성하는데 사용하는 modifier를 제공하는 유형이다.
⇒ View 프로토콜을 준수하는 사용자 정의 view 를 만들고, stack, List 등을 사용해 텍스트, 이미지 및 사용자 정의 모양을 표시하기 위한 SwiftUI view 로 구성된다.
struct MyView: View {
var body: some View {
Text("Hello, World!")
}
}
4. 내장된 뷰와 고유한 뷰의 강력한 수정자(modifier)를 적용해 렌더링 및 상호작용을 커스터마이즈한다.(사용자정의한다.)
⇒ context 와 presentation 에 맞춰 조정되는 view와 controls 을 사용해 여러 플랫폼의 앱 간에 코드를 공유할 수 있다.
5. SwiftUI view 를 UIKit, AppKit, WatchKit 프레임워크 개체와 통합해 플랫폼별 기능을 더욱 활용할 수 있다.
6. 사용자 정의 앱 프로토콜 준수자가 앱에 대한 진입점을 제공한다는 것을 나타내기 위해 @main
속성을 struct
선언 앞에 붙인다.
⇒ SwiftUI App 에는 단 하나의 진입점이 포함되어 있다. 앱에서 둘 이상의 구조에 @main
을 적용하려고 하면 컴파일러 오류가 발생한다.
모든 앱 파일 중 정확히 하나의 entry point(진입점)을 가질 수 있다.
NOTE
main()
은 app 이 초기화되고 실행한다. App 준수자 선언 앞에 @main
특성(attribute)을 추가하면 시스템은 준수자의 main()
(type method)메서드를 호출하여 앱을 시작한다.
@MainActor
static func main()
'Apple > SwiftUI' 카테고리의 다른 글
@PropertyWrapper - ObservableObject, EnvironmentObject (수정중..) (0) | 2023.11.12 |
---|---|
Property Wrappers 에 대해 알아보자 - State, Binding ① (0) | 2023.11.04 |
ViewBuilder 는 어떻게 만드는 걸까? - ② (0) | 2023.10.07 |
ViewBuilder 란 무엇일까? - ① (0) | 2023.09.16 |