일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- rxswift
- 애니메이션
- Observable
- Clean Code
- swift documentation
- Refactoring
- collectionview
- tableView
- UICollectionView
- 리팩토링
- ribs
- uiscrollview
- combine
- UITextView
- uitableview
- swiftUI
- HIG
- map
- RxCocoa
- Protocol
- ios
- 스위프트
- SWIFT
- Human interface guide
- MVVM
- clean architecture
- 리펙터링
- Xcode
- 클린 코드
- 리펙토링
- Today
- Total
목록RxSwift (40)
김종권의 iOS 앱 개발 알아가기
Observable의 Deferred 보통 어떤 작업을 wrapping할때 Observable.create()를 사용하지만, deferred를 사용하는 방법이 존재 // Observable.create 사용 예제 // stored propoerty let aObservable = Observable.create { observer in DispatchQueue.main.asyncAfter(deadline: .now() + 3) { observer.onNext(1) observer.onCompleted() } return Disposables.create() } // computed proprety var bObservable: Observable { .create { observer in observer..
재시도 처리 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을 ..
예제 코드에서 사용한 프레임워크 코드로 UI 작성에서 편리를 위해 사용 pod 'SnapKit' pod 'Then' Rx 프레임워크 pod 'RxSwift' pod 'RxCocoa' WithLatestFrom vs CombineLatest 공통점 결합하는 요소들의 타입들이 달라도 사용 가능 차이점 a.withLatestFrom(b): a이벤트가 발생했을 때만 b 이벤트와 같이 방출 combineLatest(a, b): a나 b이벤트 둘 중 하나 발생했을 때 방출 주의사항: combineLatest(a, b)는 바로 방출 사용처 withLatestFrom: 버튼을 탭한 경우, 입력했던 이메일 값을 서버에 전송하여 유효성 검정 실시 combineLatest: 이메일과 패스워드 입력할 때마다 카운트하여, 로그..
amb() ambiguous (모호한) switch 문과 역할 동일 런타임 시점에 스트림을 변경하여 emit할 수 있게하는 연산자 let newObservable = left.amb(right) => left 스트림과 right 스트림 중 먼저 방출되는 스트림만 살아남고 나머지 하나는 무시 ex1) let subjectEven = PublishSubject() let subjectOdd = PublishSubject() let newObservable = subjectEven.amb(subjectOdd) let disposable = newObservable.subscribe(onNext: { value in print(value) }) subjectOdd.onNext(1) subjectOdd.onNex..
* 주의: 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..