전체 글
Combine - Error Handling
Error handling with mapError, setFailureType, & flatMap Combine의 Publisher에서 Failure가 Never이지만, operator에서 Error을 처리해줘야하는 경우가 있을 수가 있다. 아래처럼 2가지 방법이 존재한다. Failure를 변환함. Error을 잘 처리해서, Failure가 없는 Never 타입으로 변경함. 샘플 코드를 통해 어떻게 catch, retry, setFailureType, replaceError(with), mapError를 살펴보자 샘플 코드는 url를 통해 이미지를 가져오는 예제이다. 시나리오는 아래와 같다. URL 주소 값은 string 타입의 FailureType이 Never인 Publisher이다. URL이 변경 ..
Combine - Operator(switchToLastest, FlatMap)
Operator : Publisher가 subcriber에게 전달하는 데이터를 변환하는 작업을 중간에 할 수가 있음. 오늘 살펴볼 목록 switchToLastest flatMap subscribe receive map(\.data) flatMap scan removeDuplicates switchToLastest 요청중인 작업을 취소하고, 현재 구독으로 바꿔버리는 작업을 해줌 예를 들어 네트워크 요청을 하고 있을 때, publisher가 다른 내용을 전달 했다면 그 즉시 새로운 publisher를 구독함으로, 기존의 publisher의 구독을 취소하고 새로운 publisher을 구독한다는 것임. 즉, 네트워크 통신 중 이였다면 취소하고, 새롭게 요청한 네트워크 요청으로 바꿔버린다는 것임. let subj..
Combine - Operator(map, compactMap, tryMap)
Operator : Publisher가 subcriber에게 전달하는 데이터를 변환하는 작업을 중간에 할 수가 있음. 오늘 살펴볼 목록 map compactMap tryMap map, compactMap, tryMap의 차이 셋 모두 어떤 것에서 다른것으로 변환해주는 작업을 할 수 있다. map let numbers = [1,2,3,4,5] let doubles = numbers.map{ $0 * 2 } let wizards = ["Harry", "Hermione", "Ron"] let uppercased = wizards.map{ $0.uppercased() } // Int로 변환이 불가능하다면, // Optional 정수가 반환됨. let maybeNumbers = wizards.map{ Int($0..
combine - 2. Network 예제 살펴보기
API call 예제 api을 통해 데이터를 요청하고, 테이블 뷰를 새로고침 하는 간단한 예제를 만들어보자. 우선, NetworkManager.swift를 생성해주자. import Foundation import Combine class NetworkManager { // single 톤 패턴 static let shared = NetworkManager() // subscriber들의 메모리를 참조 할 수 있는 저장소 private var cancellables = Set() private let baseURL = "" } cancellables는 publisher을 구독하는 subscriber들의 메모리를 참조 할 수 있는 저장소이다. 나중에 나오겠지만 store 메서드를 통해 저장하는 로직이 나온다..
combine - 1. Combine에 관하여
Combine 이란? combine은 뭐지, 왜 쓰는 걸까? Combine은 시간의 흐름에 따라 발생하는 이벤트를 처리하기 위한 API 이다. 시간의 흐름이란 의미가 모호한데, 클릭 이벤트나 데이터를 호출하는 것과 같은 비동기 요청이 어떻게 실행 되는지 알아야한다. 비동기 요청이 실행되기전, 완료 된 후 등과 같은 시점을 시간의 흐름이라고 생각하겠다. 즉, 비동기 요청이 발생 했을 때 실행되기전, 완료 된 후 등과 같은 시점을 처리하기 위한 API 이다. 근데, 특이한 점이 요청이 발생하고 완료 되었을 때 요청을 원했던 모든 구독자들 에게 영향을 끼칠 수 가 있다. 그러니까 예를들면, 유튜버가 영상을 하나 올리면(=비동기요청) 유튜브를 구독한 모든 사람들에게 알림을 주는 느낌이다. combine을 사용하..
CollectionView - CustomLayout
CollectionView CustomLayout 예제 소개 UICollectionView Custom Layout Tutorial: Pinterest Build a UICollectionView custom layout inspired by the Pinterest app, and learn how to cache attributes and dynamically size cells. www.raywenderlich.com raywenderlich.com에 있는 예제다. CollectionView를 통해 높이가 제각각인 Grid를 만들 수가 있는데 코드를 살펴보면서 CollectionView의 CustomLayout 기능을 공부하고자 한다. 기본 환경 설정 (UICollectionViewFlowLayou..
CollectionView Prefetch 살펴보기
이전 글에서 CollectionView의 기본적인 사용법을 알아봤다. 이외에 다른 기능들중 재밌는게 뭐 없나 공식문서를 보다가 Prefetching 기능이 있는걸 알게되었다. 오.. prefetch를 어떻게하는거지 하고 찾아보다가 공식문서에 예제가 있네...? iOS 10에서 추가된 기능으로 WWDC에도 나온 부분인 것 같다. A Tour of UICollectionView - WWDC18 - Videos - Apple Developer UICollectionView is a flexible, powerful tool to help you achieve great user experiences in your applications. Hear how you can leverage... developer.a..
CollectionView UICollectionViewDelegate 사용해보기
- 다른 기능은 뭐가 있지? 단일 Cell 선택 하기. 다중 Cell 선택을 구현합니다. Cell을 드래그하기 쉽게 이동할 수 있습니다. 단일 Cell 선택하기 생성한 Color들을 선택하면 Check 표시가 나게 설정해보자. Color를 선택하면 체크가 된 원으로 바꾸기 위해 Asset에 svg 이미지를 추가했다. ColorViewCell로 들어가 Cell에서 ImageView를 생성해준다. 이 ImageView를 통해 Color가 선택되었다면, color_pick이미지를 불러 올 것이다. class ColorViewCell: UICollectionViewCell { // MARK: - Properties var colorView: UIImageView = { let iv = UIImageView() ..