📌Swift Playgrounds
📌 앱 구성
@StateObject private var eventData = EventData()
- 속성 래퍼
- 변수를 좀 더 쉽게 선언하고 관리할 수 있도록 함: 변수를 관리하고 추적. @로 시작
- 특정 작업을 자동으로 해주는 코드를 변수에 적용할 수 있게 됨
- @StateObject: 객체(위의 예문에서는 eventData)의 상태 변화를 뷰가 알 수 있도록 하고, 그 변화에 따라 화면을 업데이트
- private 접근 제어자: 변수를 현재 파일에서만 사용하도록 함
- 인스턴스: 특정 클래스(=설계도)로부터 만들어진 객체. 설계도(EventData)를 토대로 실제 사용 가능한 데이터 덩어리를 만드는 것
- 위의 예문을 해석해 보자면,
EventData라는 클래스의 인스턴스 EventData()를 eventData라는 이름의 객체(변수)로 만들고, SwiftUI가 객체의 상태 변화를 자동으로 추적하여 화면을 업데이트하게 해!
정도가 되겠다.
📌 이벤트 모델
//Identifiable 프로토콜에 따라 이벤트 목록을 작성하는 경우,
//SwiftUI는 각 행을 식별하고 업데이트 할 수 있습니다.
struct Event: Identifiable, Hashable, Codable
- 프로토콜?
- 특정 기능, 속성(프로퍼티)이 클래스/구조체/열거형 같은 타입에 포함되어야 한다는 일종의 약속
- 적용된다면 명시된 요구사항을 반드시 구현해야 한다.
struct Event: Identifiable {
var id: UUID // 각 Event마다 고유한 식별자가 됩니다.
var name: String
}
- Identifiable: 고유 식별자를 갖도록 하여 데이터 목록 관리에 유리하다.
struct Person: Hashable {
var name: String
var age: Int
}
- Hashable: 객체를 해시값으로 변환한다.
*해시값: 데이터를 고정된 길이의 숫자나 문자열로 변환한 값. 데이터의 빠른 검색이 가능하도록 한다.
위의 예시에서는 name, age를 바탕으로 고유의 해시값을 생성한다.
- Codable: 데이터의 인코딩, 디코딩을 돕는다. JSON 데이터로의 변환 혹은 JSON에서 객체를 만들기가 쉬워진다. 서버와 데이터를 주고받을 때 자주 사용한다.
📌 이벤트 데이터
//ObservableObject 프로토콜을 따르므로
//게시된 값이 변경되면
//SwiftUI는 자동으로 모든 관찰자에 알림을 보내고 보기를 업데이트
- ObservableObject: 데이터 변화를 추적한다. 데이터가 바뀔 때마다 SwiftUI가 자동으로 화면을 업데이트할 수 있다.
- @Published: 변수가 바뀔 때 자동으로 SwiftUI에 알림을 보내주도록 설정한다. ObservableObject와 함께 자주 쓰인다.
- 관찰자: 관찰 가능한 객체의 데이터를 사용하는 보기 내지는 객체
📌 이벤트 목록
struct ContentView: View {
let fruits = ["Apple", "Banana", "Cherry"]
var body: some View {
List(fruits, id: \.self) { fruit in
Text(fruit)
}
}
}
- List: 목록 표시용 기본 구성 요소
class EventData: ObservableObject {
@Published var eventCount: Int = 0
}
struct ParentView: View {
@StateObject var eventData = EventData() // ParentView에서 eventData를 생성
var body: some View {
ChildView(eventData: eventData) // ChildView로 전달
}
}
struct ChildView: View {
@ObservedObject var eventData: EventData // ParentView에서 전달된 eventData를 추적
var body: some View {
Text("Event Count: \(eventData.eventCount)")
}
}
- @ObservedObject: 다른 뷰에서 만든 ObservableObject를 전달받아 사용한다. 어떤 뷰가 외부에서 전달된 데이터를 추적하도록 하는 속성 래퍼이다.
- 뷰?: 화면에 표시되는 모든 요소를 생성하고 구성하는 블록. 기본 뷰에는 Text, Image, Button, List, VStack, HStack, ZStack 등이 있다. 뷰는 계층 구조로, 각 뷰는 다른 뷰를 포함할 수 있다.
- NavigationSplitView: 다단계의 네비게이션을 제공한다. 사이드바, 컨텐츠, 디테일로 구성되어 있으며 다단계 탐색을 지원하고 화면 공간을 최적화하며 동적 UI를 제공한다는 장점이 있다.
List(selection : $selection) {
ForEach (Period.allCases) {
period in
section(content : {
ForEach(eventData.sortedEvents(period: period)) {
$event in
- $: 바인딩을 나타내는 기호
- 바인딩: 데이터의 변경 사항을 두 곳에서 동시에 반영할 수 있도록 함
- 리스트에서 선택한 항목이 변경되면 selection 변수도 업데이트 되도록 하는 것
- section: SwiftUI에서 UI 구성 요소를 그룹화하는데 사용되는 뷰
- content: 섹션에 포함될 내용 정의
'학습 기록 > swift' 카테고리의 다른 글
날짜 플래너: 앱 데이터 지속화하기 (0) | 2024.10.27 |
---|---|
The Basics #1 (0) | 2024.10.22 |
A Swift Tour - Object and Class 객체와 클래스 (0) | 2024.10.15 |