Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- UICollectionView
- 리펙토링
- swift documentation
- rxswift
- 리팩토링
- 클린 코드
- Protocol
- combine
- ribs
- Observable
- Xcode
- uiscrollview
- UITextView
- uitableview
- Clean Code
- RxCocoa
- clean architecture
- swiftUI
- tableView
- ios
- 애니메이션
- MVVM
- Human interface guide
- 스위프트
- 리펙터링
- SWIFT
- collectionview
- map
- Refactoring
- HIG
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - SwiftUI] 앱의 구조 (App, Scene, WindowGroup, ContentView) 본문
iOS 기본 (SwiftUI)
[iOS - SwiftUI] 앱의 구조 (App, Scene, WindowGroup, ContentView)
jake-kim 2022. 7. 27. 01:21App이란?
- Star라는 앱을 만들면 자동으로 StarApp.swift파일과 ContentView.swift파일이 자동으로 생성
- App을 상속받고 있는 StarApp을 확인
import SwiftUI
@main
struct StarApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
- App이란?
- 앱의 구조와 동작을 나타내는 타입
- App 위에는 @main이라는 어노테이션을 사용하여 앱의 entry point를 명시하여 같이 사용
cf) SwiftUI를 공부하면서 사용할 유용한 단축키 (document 오픈 + 검색): control + cmd + option + /
- body라는 computed property를 이용하여 앱의 content를 표시
- App의 body 부분에는 Scene 이라는 프로토콜을 준수하는 형태
@main
struct StarApp: App {
var body: some Scene { // <-
WindowGroup {
ContentView()
}
}
}
- Scene은 뷰 계층에서 가장 root에 해당되며, 시스템에 의해 라이프 사이클을 가지고 있는 형태
- Scene타입에서만 WindowGroup, Settings 등을 사용
@main
struct Mail: App {
var body: some Scene {
WindowGroup { // <-
MailViewer()
}
Settings { // <-
SettingsView()
}
}
}
- WindowGroup 개념
- Window라는 개념은 뷰들의 컨테이너 역할을 하면서 동시에 터치 이벤트와 같은 이벤트를 가장 먼저 수신하여 subview들에게 이벤트를 전달하는(responder chain) 기능
- macOS와 iPadOS와 같이 그룹으로부터 여러개의 window를 띄울 수 있는 형태일때 WindowGroup을 여러개 정의하여 사용
- 자동으로 생성된 ContentView를 선언하여 사용
- ContentView는 단순히 뷰들이 위치할 공간 (=컨테이너)를 나타내고, ContentView안에 뷰들을 구현
@main
struct StarApp: App {
var body: some Scene {
WindowGroup {
ContentView() // <-
}
}
}
ContentView
- ContentView는 단순히 뷰들이 위치할 공간 (=컨테이너)를 나타내고, ContentView안에 뷰들을 구현
- ContentView에 본격적으로 뷰를 선언
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text("Hello, world!")
}
}
}
- padding을 선언하면 플랫폼별로(iOS, macOS, watchOS) 자동으로 디폴트 패딩이 설정
- 아래에서는 VStack에 padding()을 설정했으므로 VStack의 edges에 패딩이 존재
struct ContentView: View {
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundColor(.accentColor)
Text("Hello, world!")
}
.padding() // <-
}
}
- padding은 배열로 특정 구간 설정도 가능
.padding([.bottom, .trailing], 20)
* 참고
https://developer.apple.com/documentation/swiftui
https://developer.apple.com/tutorials/swiftui-concepts/exploring-the-structure-of-a-swiftui-app
'iOS 기본 (SwiftUI)' 카테고리의 다른 글
[iOS - swiftUI] Text, kerning, tracking, Localization, ViewModifier, Text ViewModifiers 개념 (0) | 2022.07.30 |
---|---|
[iOS - swiftUI] View Protocol (뷰 프로토콜) (0) | 2022.07.29 |
[iOS - swiftUI] SwiftUI의 기본 - 목차 (0) | 2022.07.28 |
[iOS - swiftUI] TextField, onSubmit, textFieldStyle, @FocusState TextField ViewModifier 개념 (0) | 2022.07.25 |
[iOS - SwiftUI] some 키워드 (Opaque Types, body 프로퍼티) (0) | 2022.07.19 |
Comments