키보드의 검색 버튼을 입력했을때 뿐만아니라 키워드를 입력할때마다 Request를 요청할수 없을까?? (rx.text로 변경된 text감지하기) 4줄 요약 RxCocoa의 text (SearchBar.rx.text)를 이용해 text변경시 Request를 요청하도록 구현함. 의도한것과 다르게 처음 키워드를 입력할때와 키보드 제거시 Request요청 하는 문제가 발생함. text Definition을 확인해보니 SearchBar의 text가 nil일경우 "" 으로 옵셔널바인딩 하는것과 키보드제거(편집 종료) 되었을때도 text를 방출하는것을 확인함. distinctUntilChanged()오퍼레이터를 사용해 동일한 text를 방출하게될경우 무시하도록 하여 문제를 해결함. 처음 API Search기능 구현시 ..
RxSwift ErrorHandling ErrorHandling 앱에서 발생하는 가장 흔한 에러들은 다음과 같다. 인터넷 연결 없음: 아주 흔한 에러 중 하나다. 만약 앱이 인터넷 연결을 통해 데이터를 받아와야하는데 기기가 오프라인 상태가 된다면, 이를 감지하고 적절한 대응을 해줘야 한다. 잘못된 입력: 때에 따라서 정해진 폼에 따라서 입력값이 필요한 경우가 있다. 하지만 사용자는 언제든지 잘못된 값을 입력할 수 있다. 전화번호 입력란에 숫자대신 글자를 입력하는 사용자는 언제나 있을 수 있다. API 또는 HTTP 에러: API를 통한 에러는 아주 광범위하게 일어난다. 표준 HTTP 에러(400 또는 500 에러)를 통해 표시되거나 JSON 내 status 필드를 통해 표시될 수 있다. RxSwift에서..
RxSwift Combining Operators Combining Operators 다양한 방법으로 sequence들을 모으고, 각각의 sequence내의 데이터들을 병합하는 방법을 배워보자. observable로 작업할 때 가장 중요하게 확인해야 할 것은 observer가 초기값을 받는지 여부다. .startWith() 요녀석은 초기값을 갖는 옵저버블 이라고 할수있겠다. 이벤트가 발생되어 next로 방출될때 초기값을 방출한후 전달된 이벤트들을 방출할수 있게된다. 네트워크 연셜 상태 같이 현재 상태가 필요한 상황에 요녀석을 사용해 현재 상태를 초기값으로 붙여줄수 있겠다.let numbers = Observable.of(2, 3, 4) let observable = numbers.startWith(1) ..
RxSwift2 Observable Observable Observable은 이벤트 시퀀스를 비동기적으로 생성하는 기능을 가지고 있다. observable, observable sequence, sequence 모두 같은 말이다. 중요한것은 이 모든 것들이 비동기적()이라는 것 이다. 이 때 Observable이 지속적으로 이벤트를 발생시키는 것을 emit(방출)이라고 한다. 1. Observable의 LifeCycle next를 통해 1, 2, 3을 방출하는 Observable 세번의 tap 이벤트를 방출한뒤 Complete를 통해 종료된 Observable 1, 2를 방출하고 에러가 발생해 error를 통해 종료된 Observable 이전글에 작성한것처럼 여기서 next, error, complete..
RxSwift3 Subjects, Relay Hot Observable vs Cold Observable 언제 이벤트들이 방출 되는지에 따라 Observable을 두가지로 분류할 수 있다. 두가지의 차이점은 다음과 같다. 구독할 시 데이터를 처음부터 발행 여부 이벤트 발생 시점 스트림 분기 성질 Hot Observable Observable을 생성하고 일정 시간이 지난 상태에서 subscribe하면 처음 데이터를 받는 것이 아닌 중간부터 방출된 데이터를 받을 수 있게된다. 구독 여부와 상관없이 데이터를 방출합니다. 데이터를 처음부터 발행하는 것이 아닌 구독 시점에서 방출되는 값을 받기 시작합니다. 스트림을 분기하는 성질이 있다. 마우스, 키보드, 시스템 이벤트와 같은 UIEvent, 타이머, 멀티 캐스팅..
RxSwift 시작하기 RxSwift란? RxSwift is a library for composing asynchronous and event-based code by using observable sequences and functional style operators, allowing for parameterized execution via schedulers. By Marin Todorov. ‘RxSwift — Reactive Programming with Swift.’ RxSwift는 코드를 새로운 데이터에 반응하며 순차적으로 처리하게 함으로써 비동기 프로그래밍을 쉽게하도록 도와준다. UIKit에서의 비동기 프로그래밍 대부분의 Class에서는 비동기로 작업을 수행하고 모든 UI 구성은 기본적으로..
RxSwift Transforming Operators Transforming Operators Observable을 변형하는 Operator .toArray() Observable의 독립적 요소들을 array로 넣는 가장 편리한 방법은 toArray를 사용하는 것이다. let disposeBag = DisposeBag() Observable.of("A", "B", "C") .toArray() .subscribe(onNext: { print($0) }) .disposed(by: disposeBag) 요녀석은 array로 바뀐다고했다. 출력은 요렇게! ["A", "B", "C"] .map() RxSwift의 map 연산자는 Observable 에서 동작한다는 점만 제외하면 Swift 표준 라이브러리의 ma..
RxSwift Operators Operator란? Operator는 Rx의 기본요소이다. Operator를 사용해 Observable에 의해 방출 되는 이벤트를 변환하고 처리하여 대응할수 있다. Operator는 크게 세 그룹으로 나뉘며 다음과 같다 Filtering Operator Transforming Operator Combining Operator Filtering Operators filtering operator를 사용해 .next이벤트를 통해 받아오는 값을 선택적으로 취하할 수 있다.(원하는놈만 걸러서 가져올수있다.) 기존 Swift의 filter(_:)와 비슷하다. 1. .ignoreElements() https://rxmarbles.com/#ignoreElements ignoreElem..