일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- swift documentation
- map
- HIG
- MVVM
- 애니메이션
- Xcode
- UICollectionView
- uiscrollview
- Human interface guide
- swiftUI
- Clean Code
- 클린 코드
- SWIFT
- Observable
- tableView
- collectionview
- 리펙터링
- 스위프트
- Refactoring
- rxswift
- ribs
- uitableview
- UITextView
- combine
- Protocol
- 리펙토링
- clean architecture
- ios
- 리팩토링
- RxCocoa
- Today
- Total
목록RxSwift/RxSwift 응용 (14)
김종권의 iOS 앱 개발 알아가기
재시도 처리 retryWhen 사용하여 아래와 같은 상황에서 재시도 처리 Observable로 감쌓여진 API 호출로부터 error 응답을 받은 경우, 특정 시간 이후에 다시 재시도 방법? Observable에 감쌓여진 특정 로직 처리 후 error 이벤트가 발생한 경우, 특정 시간 이후 다시 재시도 방법? 사용한 프레임워크 RxSwift RxCocoa retryWhen closure를 파라미터로 받아서 해당 해당 closure가 완료되면 시도했던 로직 self로 다시 sequence로 만들어서 동작 // PrimitiveSequence.swift public func retryWhen( _ notificationHandler: @escaping (Observable) -> TriggerObservabl..
subscribe or bind 시 그만큼 해당 Observable이 create되는 것을 주의 구독만 해도 해당 Observable의 `create`가 호출되면서 스트림이 생긴다는 것을 명심할 것 테스트에 사용할 예시 API 정의 enum API { private static var count = 0 static func requestSomeAPI() -> Observable { Single.create { single in let params: [String: Any] = [ "lon": 113, "lat": 23.1, "ac": 0, "unit": "metric", "output": "json", "tzshift": 0 ] AF .request( "https://www.7timer.info/bin/..
1. RxSwift의 Map, FlatMap - 사용하여 비동기를 순서대로 처리 방법 2. RxSwift의 Map, FlatMap - 사이드 이펙트 처리 방법 (throw와 catch 사용) map과 flatMap 연산자 개념을 구분 개념 구분 flatMap은 블록 내에서 Observable을 리턴해야하므로, API를 사용할때 응답값이 Observable일때 flatMap사용 map의 리턴값은 Observable이 아니고, 사이드이펙트 처리 시 throw를 리턴하여 처리 주의사항: 스트림안에서 throw가 하나라도 방출되면, 해당 stream은 dispose되므로 사용자가 계속 재시도 할 수 있는 이벤트 처리에는 부적합한것을 주의 (예제 상황도 사용자가 계속 시도할 수 있으므로 부적합하지만 설명을 위해서..
1. RxSwift의 Map, FlatMap - 사용하여 비동기를 순서대로 처리 방법 2. RxSwift의 Map, FlatMap - 사이드 이펙트 처리 방법 (throw와 catch 사용) 편리를 위해 사용한 프레임워크 # UI pod 'SnapKit' pod 'Then' # Rx pod 'RxSwift' pod 'RxCocoa' # Network pod 'Moya/RxSwift' # Utils pod 'JGProgressHUD' # 로딩 사용한 API - Unsplash 이미지 조회를 위한 API https://unsplash.com/documentation 비동기 작업 순서 `확인` 버튼 탭 API를 통해서 이미지 url 획득, url을 UILabel에 입력 로딩 프로그래스 바 표출 후, url을 ..
* 주의: Section이 한개밖에 없는 경우 해당 방법 사용하고, 만약 Section이 여러개면 RxDataSource 사용 방법 포스팅 글 참고 Cell 준비 // MyCell.swift import UIKit final class MyCell: UITableViewCell { private let label: UILabel = { let label = UILabel() label.font = .systemFont(ofSize: 24) label.textColor = .black return label }() override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { super.init(style: style, reuseId..
Reactive Extension을 사용하기 위해 알아야하는 개념 KeyPath, WritableKeyPath, ReferenceWritableKeyPath, DynamicMemberLookup 개념 포스팅 글 Observable, Observer, Producer, ControlEvent, Binder 개념 (RxSwift, RxCocoa) 포스팅 글 Reactive란? rx 네임 스페이스의 정체 아래와 같이 RxSwift의 Reactive 파일을 보면, ReactiveCompatible에 rx 연산 프로퍼티가 존재하고 getter부분에는 타입을 리턴 ReactiveCompatible을 채택하면 해당 클래스에서는 rx프로퍼티로 접근할 수 있고, rx프로퍼티에서는 base인스턴스를 가지고 있으니, 최종적..
Observable 아이템을 소유하고 있고 일정 기간 계속해서 이벤트를 비동기적으로 방출(emit) ObservableConvertibleType 가장 최상위에 위치한 프로토콜이며, 기본으로 asObservable이라는 메소드가 있으며 asSingle , asDriver , asSharedSequence 세가지 유형의 확장 메소드가 존재 // // ObservableConvertibleType.swift // RxSwift // // Created by Krunoslav Zaher on 9/17/15. // Copyright © 2015 Krunoslav Zaher. All rights reserved. // public protocol ObservableConvertibleType { associate..
share * 원래 Observable은 subscribe될 때만 create클로저를 호출하여 Observable을 생성 (== subscribe한 횟수만큼 새로운 시퀀스 생성) // API를 요청, 결과를 반환하는 시퀀스라 가정 let networkRequestAPI = Observable.of(100) let result = requestMoreButton.rx.tap .flatMap { networkRequestAPI } result .map { $0 > 0 } .bind(to: requestMoreButton.rx.isHidden) .disposed(by: bag) result .map { "Count:\($0)" } .bind(to: remainCountLabel.rx.text) .dispose..