일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리팩토링
- combine
- rxswift
- 리펙토링
- Clean Code
- UICollectionView
- swift documentation
- tableView
- Protocol
- Refactoring
- Observable
- 애니메이션
- 리펙터링
- 스위프트
- uitableview
- uiscrollview
- UITextView
- collectionview
- MVVM
- map
- 클린 코드
- Human interface guide
- clean architecture
- HIG
- SWIFT
- ios
- RxCocoa
- Xcode
- swiftUI
- ribs
- Today
- Total
목록RxSwift/RxSwift 기본 (17)
김종권의 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..
예제 코드에서 사용한 프레임워크 코드로 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..
참고) RxSwift6 기준, RxSwift: Observable, Observer, Producer, Binder RxCocoa: ControlEvent Observable, Observer, Producer 형태 RxSwift 프레임워크 안에 존재 Observable의 구조 ObservableConvertibleType 프로토콜 asObservable() 메소드 구현을 강제화 Observable로 변환할 수 있는 타입이면, asObservable 메소드가 존재 public protocol ObservableConvertibleType { associatedtype Element func asObservable() -> Observable } ObservableType ObservableType은 s..
핵심: Observable이 이벤트 방출, Oserver가 subscribe Observer Observable안에 있는 내부 인스턴스들로 Observable의 값에 변화가 있을 때 didSet 원리로 Observer에게 알림이 가고, Observer가 등록한 closure를 실행 Observable Observer 인스턴스를 가지는 상태 value 인스턴스를 가지고 있다가, value가 변경되면 didSet을 통해 아이템 방출 Subscribe observe()의 의미와 동일 Observable의 값이 변경될 때마다 '특정 작업'을 위한 closure블럭을 같이 넘김으로서 그 closure블럭이 실행되게끔 설정 Subject Observable과 Observer의 성격 모두 가지고 있는 Protocol..
* 사용 : 쓰레드와 병렬처리를 다룰 때 1. Scheduler 개념 1) 정의 프로세스가 있는 곳의 context (여기서의 context = thread, dispatch queue) 2) 사용 한 Context에서 cache 연산자를 이용하여 전달 2. 연산자 1) subscribeOn(_:) Observable의 프로세싱이 어디서 일어나게 할 것인지 결정하는 연산자 let fruit = Observable.create { observer in observer.onNext("[apple]") sleep(2) observer.onNext("[pineapple]") sleep(2) observer.onNext("[strawberry]") return Disposables.create() } let gl..
1. Buffering Operators 1) share(replay:), share(replay:scope:) 과거의 이벤트들을 subscriber에게 emit - replay 파라미터 : 버퍼사이즈 (얼마만큼의 element를 새로운 subscriber에게 emit할 것인지 - scope 파라미터 : subscriber의 수가 1에서 0으로 될 때 다음 동작 .whileConnected : 공유되고 있던 stream의 cache삭제 .forever : stream의 cache를 삭제하지 않음 이밖의 메소드 - replay(_:) - replayAll() - multicast(_:) - publish() 2. Time-shifting operators 이벤트 emit에 delay를 시킬 수 있는 연산자..
Share() 연산자는 자원을 공통으로 사용 할 수 있게끔 하는 개념 1. Share을 쓰는 이유 1) MVVM설계 // ViewModel 정의 class SomeViewModel { let result = userTappedButton .flatMapLatest {apiService.rx.getFriend() } name = result.map {$0.name} phone = result.map {$0.phone} } // ViewController에서 ViewModel과 UI연결 class { ... viewModel.name .bind(to: lblName.rx.text) // UI와 ViewModel간의 연결 .disposed(by: bag) viewModel.phone .bind(to: lblP..