본문 바로가기

프로젝트

(86)
08. 새 Entity 추가, 의존성 추가 List 아래에 저장 될 Reminder Entity를 생성한다. 저장되는 데이터들은 위와 같고, 특별히 유별난 데이터를 저장할 것이 아니기때문에 Codegen도 Class Definition 그대로 둔다. 이제 이 둘을 연결해서 의존성을 부여해야 한다. MyList의 list(Inverse)들은 각각 reminder(Destination = Reminder)를 갖게 된다. 그리고 이들은 다수다. (To Many) Reminder의 reminder(inverse)들은 각각 하나씩의 list(Destination = MyList)를 갖게 된다. 이들은 하나다. (To One) 최종적으로는 위와 같은 형태로 relation이 완성된다. MyList는 Reminder로 연결되고, 여러개를 소유할 수 있으므로 ..
07. 기능개선 #1 (공백 예외처리하기) ToolbarItem(placement: .topBarTrailing) { Button("Done") { // TODO: save function onSave(name, UIColor(selectedColor)) dismiss() } .disabled(!isFormValid) } List의 name은 optional 속성이 아니고, 공백인 상태로 저장을 시도하면 오류가 발생하게 된다. private var isFormValid: Bool { !name.isEmpty } 이를 위해 저장을 시도하게 되는 Done 버튼은 name에 해당하는 textField가 비어있다면 비활성화되도록 구성했는데 공백에는 무력화 되는 문제가 생긴다. extension String { var isEmptyOrWhitespace:..
06. ListView 구성하기, Preview Data 구성하기 지금은 데이터가 CoreData에 잘 저장되는지 확인하기 위한 임시 출력하고 있을 뿐, 어떤 동작도 하지 않고, 모든 데이터를 포함하고 있지도 않다. 폴더 기능까지는 그렇다 치더라도 아이콘과 이름 등을 알맞게 표시하면 좋을 것 같다. // // MyListCellView.swift // ReminderApp // import SwiftUI struct MyListCellView: View { let myList: MyList var body: some View { HStack { Image(systemName: "line.3.horizontal.circle.fill") .foregroundColor(Color(myList.color)) Text(myList.name) Spacer() Image(syste..
04. 저장 기능 구현하기 이제 생성한 List를 CoreData에 저장해야 한다. MyList의 clolor attribute는 지원하지 않는 타입의 데이터를 저장하기 휘애 Transformable로 설정돼있고, 형변환을 위해 transformer가 필요하다. // // UIColorTransformer.swift // ReminderApp // import Foundation import UIKit class UIColorTransformer: ValueTransformer { override func transformedValue(_ value: Any?) -> Any? { guard let color = value as? UIColor else { return nil } do { let data = try NSKeyedAr..
03. AddNewListView 수정 및 호출 // // ContentView.swift // ReminderApp // import SwiftUI struct HomeView: View { @State private var isPresented: Bool = false var body: some View { NavigationStack { VStack { Text("Hello World") Button { isPresented = true } label: { Text("Add List") .frame(maxWidth: .infinity, alignment: .trailing) .font(.headline) } .padding() } .sheet(isPresented: $isPresented, content: { NavigationStack { Ad..
02. 새 List 추가 인터페이스 구현하기 DB에 새로운 List를 추가하기 위해 List를 추가하는 인터페이스를 작성한다. 애플의 Reminder와는 일단은 다르지만 기본적인 기능을 수행할 수 있도록 최소한으로 작성했다. // // ColorPickerView.swift // ReminderApp // import SwiftUI struct ColorPickerView: View { @Binding var selectedColor: Color let colors: [Color] = [.red, .green, .blue, .yellow, .orange, .purple] var body: some View { HStack { ForEach(colors, id: \.self) { color in ZStack { Circle().fill() .fore..
01. CoreData 설계(01) Reminder 앱을 위한 데이터로는 List와 Reminder가 존재한다. 이번엔 List를 위한 Entity를 설계하고, 이를 앱에서 사용할 수 있도록 Implement 한다. Entity 이름은 MyList이고, color와 name이라는 Attribute를 갖는다. color의 타입으로 사용할 UIColor는 CoreData에서 기본적으로 지원하지 않는 타입이기 때문에 직접 지정과 변환을 진행해 줘야 한다. 이를 위해 Codegen 설정을 Manual로 바꿔주고 color attribute의 타입을 Transformable로 설정하고, Transformer와 Custom Class를 직접 지정한다. // // MyList+CoreDataClass.swift // ReminderApp // impo..
아이폰에서 기프티콘을 관리하는 방법 iOS엔 별 거 아니지만 대단한 앱이 하나 존재한다. 바로 Reminder인데, 쓰지 않는 사람들이 많을 거라 생각하지만 굉장히 이점이 많은 앱이다. iCloud로 연동이 된다. 기간, 위치 정보, 태그, 사진 등 다양한 정보로 구성 할 수 있다. 알림이 된다. 달력과도 연동된다. 나도 얼마 전까지는 그냥 프로젝트 아이디어, 버그 내용, 장바구니 등으로나 사용하다가 조금 더 편하게 쓸 수 있는 방법을 생각해 봤는데 그게 바로 쿠폰북이다. 쿠폰북을 위한 기능은 다음과 같다. 기프티콘은 보통 이미지니 이걸 관리해야 한다. 유효기간이 있으니 이걸 표시하거나 알림을 표시해 줘야한다. 기프티콘을 보지 않더라도 어떤 쿠폰인지 알기 편해야 한다. 사용한 것과 사용하지 않은 것을 구분할 수 있어야 한다. 보다시피 Re..
01. 프로젝트 구성, UI 구현 프로젝트 구성 Coredata는 위와 같이 수정한다. 완료 여부를 판단할 isCompleted, 할 일의 정보를 저장할 각각의 속성이다. // 수정 전 import CoreData struct PersistenceController { static let shared = PersistenceController() static var preview: PersistenceController = { let result = PersistenceController(inMemory: true) let viewContext = result.container.viewContext for _ in 0.. Content init(displayPendingTask: Bool, filterDate: Date, content:..
00. 시작하며 시작하며 최근 앱들을 여럿 스토어에 등록했는데 슬슬 사용자들이 직접 데이터를 생성하고, 이를 관리할 수 있는 기능들에 대한 아이디어가 많아지고 있다. WWDC 2023을 기준으로 SwiftUI는 새로운 데이터 관리 도구인 SwiftData를 지원하기 시작했고, 이는 기존의 CoreData를 SwiftUI의 스타일에 맞도록 사용하는 새로운 패러다임이고 익숙해져야만 한다. 이를 위해 당분간은 CoreData를 기반으로 한 프로젝트들을 위주로 공부를 진행하고, SwiftData를 배워보면서 부족했던 부분을 채우고, 한 발 더 나아가는 기회로 삼고자 한다. 앱 Swift Swift - Apple Developer Swift is a powerful and intuitive programming language ..