Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩

SwiftUI/SwiftUI(Intermediate)24

23. 데이터 다운로드, 파일 매니저, 캐싱 종합 ⭐️데이터 다운로드, 파일 매니저, 캐싱 종합⭐️ 지금까지 배운 내용들을 종합해서 연습해 보는 예시를 살펴보자. 인터넷을 통해 json 데이터를 받아서 원하는 모델로 디코딩한 후에 해당 데이터들을 캐시에 저장해 관리하거나 파일 매니저를 통해 로컬 디바이스 스토리지에 저장하는 것이다. 어떤 데이터를 받아올 것인가? https://jsonplaceholder.typicode.com/photos 이런 json 데이터를 받아올 것이다. (총 5000장의 사진) 어떤 형태로 보여줄 것인가? 이런 리스트의 형태로 보여줄 것이다. Model json형태에 맞게 모델을 만들어 준다. import Foundation struct PhotoModel: Identifiable, Codable { let albumId: In.. 2023. 6. 16.
22. NSCache 캐시/ 이미지 캐싱 ⭐️NSCache 캐시⭐️ 캐시? 많이 들어봤을 것이다. 인터넷 옵션에서 캐시삭제, 쿠키 삭제와 같이! 캐시는 뭘까?? 캐시(Cache)는 데이터나 작업의 임시 복사본을 저장해서 이후에 빠른 엑세스를 가능하게 해주는 녀석이다. 인터넷 창을 띄웠을 때 처음에는 여러 이미지들이 로딩되는 시간이 필요해서 버벅이며 보이지만 창을 껐다가 다시 들어가면 이미지들이 더 빨리 로딩되는 것을 본 적이 있을 것이다. 이게 바로 이미지 같은 데이터들이 캐시에 저장되어 있기 때문! 그래서 캐시를 지우면 다시 이미지들을 로딩해야하기 때문에 좀 더 느리게 표시되고 버벅이는 현상이 생길 수 있다. NSCache iOS, MacOS에서는 메모리 기반 캐시를 구현하기 위해 NSCache라는 클래스가 존재한다. NSCache는 자동으로.. 2023. 6. 15.
21. FileManager 파일매니저 ⭐️FileManager 파일매니저⭐️ iOS 앱을 만들면서 데이터를 저장할 수 있는 방법은 여러가지가 있다.(상황에 따라 적절히 선택해야함) 이번에는 아이폰 내부 폴더에 직접 파일을 저장할 수 있는 파일매니저에 대해 알아보자. 먼저 데이터 여러가지 데이터 저장 방법을 비교, 정리해보자. 1. UserDefaults - 간단한 설정 값, 사용자 기본 설정 등과 같은 작은 크기의 데이터를 저장하기 위해 사용 - 주로 Key-Value 형식으로 데이터 저장, 간단한 데이터 유형(Int, String, Bool 등) 저장 - 데이터를 메모리에 로드하기 때문에 작은 크기의 데이터에 적합함. 2. CoreData - 복잡한 데이터 모델과 대량의 데이터를 관리에 유용, 상호 관련성이 있는 데이터 관계를 유지하고 추.. 2023. 6. 15.
20. @Published / Subscriber / Combine ⭐️@Published / Subscriber / Combine⭐️ 지난 시간에 이어 Combine을 활용해서 로그인 화면을 구현해 보자. 4글자 이상, 타이머는 10초 이상인 경우에만 로그인이 가능한 구조이다. 이번에는 코드마다 주석 처리를 해서 정리를 해보았다. // Created by Toughie on 2023/06/13. // import SwiftUI import Combine final class SubscriberViewModel: ObservableObject { //해당 값의 변경이 발생하면 자동으로 관련 뷰에 알림을 보내 렌더링 업데이트가 이루어짐. @Published var count: Int = 0 //Combine에서 구독을 취소할 때 사용되는 객체 타입인 AnyCancellab.. 2023. 6. 14.
19. Timer 타이머 ⭐️Timer 타이머⭐️ 지난 시간 컴바인 개념을 떠올리며.. 타이머도 Publisher이다. 일정한 시간 간격마다 이벤트를 생성하기 때문이다. 이를 활용해서 카운트 다운, 시계, 디데이, 애니메이션, 자동 스와이프 등을 구현할 수 있다. Timer let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect() every - 타이머 이벤트가 발생하는 간격 (여기서는 1초 마다) on - 타이머 이벤트가 실행되는 큐를 지정. (여기서는 UI 업데이트 관련 작업을 하기에 메인 스레드로 지정) in - 타이머 이벤트를 처리할 스케줄러(scheduler)를 지정. .common은 일반적인 실행 우선순위를 가짐. (타이머 이벤트가 기본 실행 우.. 2023. 6. 13.
18. Combine 컴바인 .feat JSON ⭐️Combine / 컴바인⭐️ 컴바인,RxSwift 말로는 참 많이 들었다. 드디어 찍먹을 해본다! https://developer.apple.com/documentation/combine Combine | Apple Developer Documentation Customize handling of asynchronous events by combining event-processing operators. developer.apple.com https://developer.apple.com/videos/play/wwdc2019/722/ Introducing Combine - WWDC19 - Videos - Apple Developer Combine is a unified declarative fram.. 2023. 6. 13.