textfield.rx.text가 당연히 textfield의 text가 변할 때만 이벤트가 방출되는 줄 알았는데, 아니라는 것을 알게 되어서 정리합니다..! UILabel은 빼고 사용자 입력에 따라 텍스트가 변하는 UI 삼인방(?) UITextField, UISearchBar, UITextView 를 살펴봅니다 이렇게 실험을 준비해줍니다 1. textField.rx.text UITextField+Rx.swift 파일에 들어가줍니다 controlPropertyWithDefaultsEvents에 들어가봅니다 😱😱 놀랍게도 valueChanged뿐만 아니라 allEditingEvents에도 트리거 된다는 것을 확인할 수 있습니다...!!! 😱😱 allEditingEvents는 텍스트 필드에 editing 하려..
[1] debounce - 타이머를 지정해두고 타이머가 끝난 시점에 가장 최근의 값을 방출해준다. - 이벤트가 방출될때마다 타이머가 초기화된다. - 사용예제: 타이머를 2초로 지정해두면, 사용자가 버튼을 폭풍 누르다가 더이상 버튼을 안누르고 2초가 지날때 가장 마지막 클릭 이벤트를 준다. [2] throttle - 타이머를 지정해두고 이벤트가 처음 방출되면 타이머 동안 어떤 이벤트도 방출되지 않는다. - 이벤트가 방출될때마다 타이머가 초기화되지 않는다. - 사용예제: 타이머를 2초로 지정해두면, 사용자가 버튼을 폭풍 누를때 처음 클릭 이벤트만 주고 2초동안 어떠한 클릭이벤트도 주지 않는다. (다만 latest를 어떻게 설정해주냐에 따라 조금 다른데 밑에서 확인!_!) [2.1] throttle lates..
Signal와 Driver는 UI 계의 PublishSubject / BehaviorSubject 같은 것...! Signal과 Driver 의 공통점 - error를 return 하지 않는다. - 메인 쓰레드에서의 작동을 보장한다. - Rxcocoa에 있음 Signal과 Driver 의 차이점 - Signal은 새로운 구독자에게 replay 해주지 않는다. (Driver 처럼 구독하는 순간 초기값이나 최신값을 주지 않는다. 구독한 이후에 발행되는 값을 받음. 위의 사진 참고) - Signal은 emit함수로 이벤트 처리 / Driver는 drive함수로 이벤트 처리 signal.emit(onNext: { (element) in } driver.drive(onNext: { (element) in } Rx..
https://medium.com/gett-engineering/rxswift-share-ing-is-caring-341557714a2d RxSwift: share()-ing is Caring - Gett Engineering - Medium RxSwift resource sharing can be hard. Learn about share(), which lets you define streams that share resources among their subscribers. medium.com 설명이 너무 감동적..🥺 share란 publish와 같은 컨셉인데, 옵져버블 공유를 위한 연산자이다 하지만 publish와 다르게 connect가 필요없다...! (👍) 그리고 publish는 옵져버블이 끝..
textField.rx.text 하고 subscirbe하면 옵셔널 타입으로 String? 을 받아오는데, 옵셔널 말고 String으로 받아오고 싶으면 orEmpty를 쓰자 -! @IBOutlet weak var addMemoTextField: UITextField! addMemoTextField.rx.text.subscribe { print($0) }.disposed(by: bag) addMemoTextField.rx.text.orEmpty.subscribe { print($0) }.disposed(by: bag) * 결과 next(Optional("ㅇ")) next(ㅇ) * 결과 next(Optional("") next()
Combining Operators 중 대표적인 두가지를 살펴보자 [ 1 ] withLatestFrom ObservableType extension에 가보면 public func withLatestFrom(_ second: SecondO) -> Observable { return WithLatestFrom(first: asObservable(), second: second.asObservable(), resultSelector: { $1 }) } 이렇게 구현되어있다 어떤 옵져버블 뒤에 withLatestFrom(Observable) 해주면 어떤 옵져버블의 이벤트가 발행될때마다 매개변수로 넘겨준 observable의 the latest element를 얻는다 예제를 보는 게 이해가 빠르다 --! let b..
reduce는 모든 이벤트들을 다 더한 총합을 방출하고 scan은 하나씩 더할 때마다 증가된 sum을 각각 방출한다 [ 1 ] Reduce Observable.of(1,2,3,4,5).reduce(0,accumulator: +) .subscribe(onNext: { print($0) }).disposed(by: disposeBag) // 출력값 15 [ 2 ] Scan Observable.of(1,2,3,4,5).scan(0, accumulator: +) .subscribe(onNext: { print($0) }).disposed(by: disposeBag) // 출력값 1 3 6 10 15 Reference https://rxmarbles.com
Observable을 만들어주는 생성 operator인 of와 from of vs from 배열을 넘겨주면 of 는 Observable을 만들고 from은 배열의 각각 원소들을 Observable로 만든다 let observableByOf = Observable.of([1,2,3]) let observableByFrom = Observable.from([1,2,3]) observableByOf의 타입은 Observable observableByFrom의 타입은 Observable 이다 Observable.of([1,2,3]).subscribe(onNext: { array in print(array) }).disposed(by: disposeBag) Observable.from([1,2,3]).subscr..
Map vs FlatMap 1) Map get value from stream and return another value of whatever type, result is Observable. 2) FlatMap get value from stream and return an Observable of whatever type. Map map은 이벤트를 바꾼다. E Type이벤트를 R Type이벤트로 바꾼다 public func map(_ transform: @escaping (Self.E) throws -> R) -> RxSwift.Observable FlatMap flatMap은 이벤트를 다른 observable로 바꾼다 public func flatMap(_ selector: @escaping (E..
시나리오 import RxSwift import RxCocoa let disposeBag = DisposeBag() struct Student { var score: BehaviorRelay } let john = Student(score: BehaviorRelay(value: 75)) let mary = Student(score: BehaviorRelay(value: 95)) let student = PublishSubject() score을 가지고 있는 Student 타입을 관찰하기 위해 student라는 subject를 만들었다 [ 1 ] FlatMap student.flatMap { $0.score } .subscribe(onNext: { print($0) }).disposed(by: dispos..
- Total
- Today
- Yesterday
- flutter dynamic link
- flutter 앱 출시
- ipad multitasking
- Flutter getter setter
- Flutter Clipboard
- DRF APIException
- 장고 Custom Management Command
- Flutter 로딩
- Django Heroku Scheduler
- flutter deep link
- ribs
- Dart Factory
- 플러터 싱글톤
- Django FCM
- 플러터 얼럿
- cocoapod
- 장고 URL querystring
- SerializerMethodField
- Watch App for iOS App vs Watch App
- METAL
- PencilKit
- Flutter Spacer
- drf custom error
- Python Type Hint
- Flutter Text Gradient
- 구글 Geocoding API
- github actions
- Sketch 누끼
- Django Firebase Cloud Messaging
- flutter build mode
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |