전체 글 (383) 썸네일형 리스트형 🔨 API 호출 함수 손 보기 (에러 처리 과정 적용) ✅ 에러 처리 미 포함 func getStoreCategories() async throws -> [StoreCategory] { var components = URLComponents(string: "\(Constants.baseURLString)/categoryCode1") components?.queryItems = [ URLQueryItem(name: "serviceKey", value: Constants.api_key), URLQueryItem(name: "numOfRows", value: "10"), URLQueryItem(name: "pageNo", value: "1"), URLQueryItem(name: "MobileOS", va.. 📍tour api를 통해 데이터 가져오기 (데이터를 확인할 목적) ✅ 구현하고자 하는 기능 상단에 가로 스크롤 카테고리 컬렉션뷰 (ex: 전체, 한식, 중식, 양식 등).사용자가 카테고리 버튼을 누르면 아래에 관련된 결과를 보여주는 컬렉션뷰가 갱신됨.데이터를 API로부터 가져오는 구조임.이때,StoreCategory (상단 버튼들)는 앱 시작 시 1회 불러오면 되고버튼 클릭 시 해당 카테고리에 맞는 다른 데이터를 불러와야 함 이때 외부 API를 요청하는 방식은 await / async를 사용할 예정 -> 관리 용이성 확보차원 func getStoreCategories() async throws -> [StoreCategory] { // 카테고리 URL 구성 let urlString = "\(Constants.baseURLString)/cat.. 드디어 앱 스토어 출시 완료! (꾸독!) 앱 출시 완료! 꾸독!!!! 앱 다운로드 링크 주소: https://apps.apple.com/kr/app/%EA%BE%B8%EB%8F%85/id6743909470?l=en-GB 꾸독** 꾸준히 독서하기, 꾸독!은 무료 앱입니다. ============================== 우리나라 성인 10명 가운데 약 6명이 1년 간 책을 단 한권도 읽지 않는 것으로 나타났습니다. 우리나라 국민의 하루 평균 독apps.apple.com 📘 ReadAloudDaily – 나만의 독서 기록 앱 만들기 (UIKit + CoreData + Combine + MVVM) 1. 프로젝트 소개ReadAloudDaily는 사용자가 매일의 독서 기록을 남기고, 각 계획별로 독서 메모를 추가할 수 있는 iOS 앱입.. 📌 Swift에서 독서 계획 내에 독서 메모를 CRUD하는 방법 (CoreData + Combine + MVVM) 🔹 목표독서 계획(ReadItem) 안에 여러 개의 독서 메모(ReadMemo)를 추가하고 관리하는 기능을 CoreData의 관계(Relationship) 를 활용하여 저장하고, Combine + MVVM 패턴으로 CRUD 기능을 구현한다. 🔹 1. CoreData에 ReadItem ↔ ReadMemo 관계 설정✅ ReadItem (독서 계획)id: UUIDtitle: StringstartDate: DateendDate: Datememos: ReadMemo와 1:N 관계 (📌 중요!)✅ ReadMemo (독서 메모)id: UUIDparentID: UUID (ReadItem과 연결)memo: Stringpage: IntreadItem: ReadItem과 관계 설정 (📌 중요!)💡 CoreData .. 📅 독서 시간을 완료한 날짜 저장하여 표시하기 ✅ 독서 기간: 3월 23일 ~ 3월 26일 경우 "⚪️ ⚪️ ⚪️ ⚪️" 총 4개로 저장 ✅ "🟢" 당일 독서 시간을 완료할 경우 ✅ "🔴" 당일 독서 시간을 완료 못할 경우 ✅ 1. ReadItemModel 검토extension ReadItemModel { var completedDates: [String: Bool] { let key = "completed_dates_\(self.id.uuidString)" return UserDefaults.standard.dictionary(forKey: key) as? [String: Bool] ?? [:] }} 👍 좋은 점UserDefaults 키를 UUID로 고유하게 설정해서 중복 방지 잘 했고모델 내에서 저장된 .. 🎉 타이머가 완료된 시점에 사용자에게 알림을 주기! ✅ 1. 화면이 열려 있을 때 (포그라운드 상태)화면이 켜져 있고 타이머가 끝났을 때 알림창(Alert)이나 경고음(Sound)을 주려면, stopTimer() 호출 직후에 추가@objc func refreshValue() { guard let startDate = userDefaults.object(forKey: startDateKey) as? Date else { return } let elapsed = Int(Date().timeIntervalSince(startDate)) let updatedRemaining = baseRemainingSeconds - elapsed if updatedRemaining > 0 { remainingSeconds = updat.. 🔥 시작일 ➡️ 종료일 포함하여 날짜 계산! ✅ 두 날짜 간의 차이를 일(day) 단위로 계산해주는 메서드private func daysBetween(_ start: Date, _ end: Date) -> Int { let calendar = Calendar.current let components = calendar.dateComponents([.day], from: start, to: end) return (components.day ?? 0) + 2} ✅ 메서드 사용하기func configure(_ readItem: ReadItemModel) { titleLabel.text = readItem.title let startDate = readItem.startDate let endDate = readItem.e.. ❓backgroundColor와 contentView.backgroundColor의 차이 1. backgroundColorUITableViewCell 자체의 배경색을 설정.셀의 바깥쪽 전체 배경색을 담당.contentView가 차지하지 않는 영역(즉, 셀과 셀 사이의 간격이나 inset으로 인해 생긴 공간)에 영향을 줌. 2. contentView.backgroundColor셀의 **내용이 들어가는 부분(contentView)**의 배경색을 설정.UITableViewCell은 contentView라는 서브뷰를 기본적으로 가지고 있으며, 모든 UI 요소는 여기에 추가되는 게 일반적.contentView.layer.cornerRadius = 10 같은 설정이 이 영역에만 적용됨.override init(style: UITableViewCell.CellStyle, reuseIdentifier: S.. 이전 1 2 3 4 ··· 48 다음