본문 바로가기

프로젝트

(83)
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 ..
TintTrove [Privacy Policy] Privacy Policy MinKyu CHA built the TintTrove app as a Free app. This SERVICE is provided by MinKyu CHA at no cost and is intended for use as is. This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal Information if anyone decided to use my Service. If you choose to use my Service, then you agree to the collection and use of information in..
JusTheme [Privacy Policy] Privacy Policy MinKyu, CHA built the JusTheme app as a Free app. This SERVICE is provided by MinKyu, CHA at no cost and is intended for use as is. This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal Information if anyone decided to use my Service. If you choose to use my Service, then you agree to the collection and use of information i..
06. 더 나아가기 더 나아가기 | 난이도 선택하기, 개선하기 강의는 끝났지만 난이도를 선택하는 부분은 빠져있다. enum FastingPlan: String { case beginner = "12:12" case intermediate = "16:8" case advanced = "20:4" var fastingPeriod: Double { switch self { case .beginner: return 12 case .intermediate: return 16 case .advanced: return 20 } } } beginner와 intermediate, advance를 화면에서 직접 선택할 수 있도록 추가로 구현한다. 난이도 선택하기 | 인터페이스 구성하기 현재 앱의 화면은 위와 같고, 난이도를 선택하기 위해 다..