SwiftData를 활용해서 TODO 어플리케이션을 만들어 봤습니다.
CoreData를 활용하기 위해서는
1. modelContainer Modifier를 통해 필요한 Model들을 선언
2. 필요 Model을 저장
3. modelContext를 활용한 데이터 활용
struct TIL_SwiftDataApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(for: [Todo.self])
}
}
//
// ContentView.swift
// TIL_SwiftData
//
// Created by MaraMincho on 6/2/24.
//
import SwiftUI
import SwiftData
struct ContentView: View {
@Query var todos: [Todo]
@Environment(\.modelContext) private var modelContext
@State var someText: String = ""
var body: some View {
NavigationStack {
VStack {
NavigationLink(value: Todo(title: "", todoContent: "")) {
Text("add todo")
}
List {
ForEach(todos) { todo in
NavigationLink(value: todo) {
Text(todo.title)
}
}
}
}
.navigationTitle("TODOS")
.navigationDestination(for: Todo.self) { todo in
TodoView(todoElement: todo)
}
}
.onAppear{
}
}
}
@Model
final class Todo {
var title: String
var todoContent: String
init(title: String, todoContent: String) {
self.title = title
self.todoContent = todoContent
}
}
struct TodoView: View {
var todoElement: Todo
@State var contentTextFieldText: String
@State var titleTextFieldText: String
@Environment(\.modelContext) private var modelContext
init(todoElement: Todo) {
self.todoElement = todoElement
contentTextFieldText = todoElement.todoContent
titleTextFieldText = todoElement.title
}
@Environment(\.dismiss) var dismiss
var body: some View {
VStack {
HStack {
Button {
todoElement.title = titleTextFieldText
todoElement.todoContent = contentTextFieldText
modelContext.insert(todoElement)
dismiss()
} label: {
Text("저장")
}
Button {
modelContext.delete(todoElement)
dismiss()
} label: {
Text("제거")
}
}
TextField("", text: $titleTextFieldText, axis: .vertical)
.background(Color.gray.opacity(0.8))
.padding()
TextField("", text: $contentTextFieldText, axis: .vertical)
.padding()
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(Color.gray.opacity(0.5))
.font(.largeTitle)
Spacer()
}
}
}
레퍼런스
https://medium.com/daily-monster/swiftdata란-무엇일까-dfbba1670f10
'Swift' 카테고리의 다른 글
Approach to load testing iOS app (stackoverflow 질문글 한국어 해석) (2) | 2024.12.03 |
---|---|
[iOS] 모듈화 하기 vs 그냥 살기. (주관적으로 느낀 모듈화 장점 3가지) (0) | 2024.11.22 |
[iOS] Weak Dictionary 다이브 (1) | 2024.02.16 |
[swift] 비동기적으로 메시지를 전달하는 방법 part 1 (delegate) (0) | 2023.10.15 |
[Swift] 여러개의 타입이 존재하는 json을 encode및 decode (0) | 2023.10.01 |