분류 전체보기

    RxSwift(32). RxCocoa, ControlEvent, UIButton+Rx

    보호되어 있는 글입니다.

    RxSwift(31). ErrorHandling, (Catch, catchAndReturn), retry

    ErrorHandling 옵저버블에서 에러가 발생하면 에러이벤트가 발생하고 구독자는 더이상 새로운 이벤트를 받지 못한다. 예를들어 옵저버블이 네트워크요청을 처리하고 구독자가 UI를 업데이트하는 패턴를 생각해본다. 보통 UI를 업데이트 하는 코드는 NextEvent에서 처리하는데 EE가 전달되게되면 구독이 종료되고 더이상 NE가 전달되지 않는다. 그래서 UI를 업데이트하는 코드는 실행되지 않는다. RxSwift는 두 가지 방법으로 이런 문제를 해결한다. 첫 번째로 에러이벤트가 전달되면 새로운 옵저버블을 리턴한다. 여기에선 Catch연산자를 사용한다. Catch연산자는 NE와 CE는 그대로 구독자에게 전달한다. 반면 옵저버블에서 옵저버블에서 에러이벤트를 방출하면 새로운 옵저버블로 바꿔서 구독자에게 전달한다 ..

    RxSwift(30). Scheduler, observe(on:), subscribe(on:)

    보호되어 있는 글입니다.

    프로그래머스 - 거리두기 확인하기 Swift(구현)

    https://school.programmers.co.kr/learn/courses/30/lessons/81302 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 및 소스코드 허드슨 거리가 2라면 조건은 해선 안되는 포지션은 아래와 같다 행이 같을경우 POP -> 탈락 열이 같을 경우 P O P -> 탈락 행과 열이 다를경우(대각선인경우) P? ?P -> ?가 하나라도 O일경우 탈락 1차원 String배열로 1개의 맵이 주어지기 때문에 이를 2차원 배열로 바꿔줘야한다. 1개의 1차원배열에 대하여 2차원 Character배열로 바꾼다. for place..

    RxSwift(29). refCount, share

    보호되어 있는 글입니다.

    RxSwift(28). Sharing Subscription, multicast, ConnectableObservable, publish, replay

    Sharing Subscription Overview 구독공유를 통해서 불필요한 작업을 방지하는 방법. let source = Observable.create { observer in let url = URL(string: "https://kxcoding-study.azurewebsites.net/api/string")! let task = URLSession.shared.dataTask(with: url) { (data, response, error) in if let data = data, let html = String(data: data, encoding: .utf8) { observer.onNext(html) } observer.onCompleted() } task.resume() return ..

    RxSwift(27). interval, timer, timeout, (delay, delaySubscription)

    interval 특정 주기마다 정수를 배출하는 옵저버블이 필요하면 이 연산자를 사용한다. public static func interval(_ period: RxTimeInterval, scheduler: SchedulerType) -> Observable { return Timer( dueTime: period, period: period, scheduler: scheduler ) } interval연산자는 타입메서드로 구현되어있다. 첫 번째 파라미터로 반복 주기를 받는데, RxTimeInterval은 DispatchTimeInterval과 같다. 두번째 파라미터는 정수를 방출할 스케쥴러를 지정한다. 연산자가 return하는 옵저버블은 지정된 주기마다 정수를 반복적으로 방출한다. 종료시점을 지정하지 않..

    RxSwift(26). amb

    amb amb는 두개이상의 소스옵저버블중에서 가장먼저 NE를 전달한 옵저버블을 구독하고 나머지는 무시한다. 마블다이어그램에서 가장먼저 NE를 전달하는것은 두번째 옵저버블이다 이 옵저버블이 전달하는 NE가 구독자에게 전달되고 나머지는 무시된다. amb연산자를 사용하면 여러 서버로 요청을 전달하고 가장 빠른 응답을 처리하는 패턴을 구현할 수 있다. public func amb (_ right: O2) -> Observable where O2.Element == Element { Amb(left: self.asObservable(), right: right.asObservable()) } 하나의 옵저버블을 파라미터로 받는다. 두 옵저버블중 가장먼저 NE를 전달하는 옵저버블을 구독하고 이옵저버블의 이벤트를 구독..

    RxSwift(25). withLatestFrom, sample, switchLatest, reduce

    withLatestFrom 이 연산자는 ✧ㅏ래 형태로 사용된다. triggerObservable.withLatestFrom(dataObservable) 연산자를 호출하는 옵저버블을 트리거옵저버블이라부른다 파라미터로 전달하는 옵저버블을 데이터옵저버블이라부른다. 트리거옵저버블이 NE를 방출하면 데이터 옵저버블이 가장 최근에 방출한 NE를 구독자에게 전달한다. 예를들어 회원가입버튼을 탭하는 시점에 TextField에 입력된 값을 가져오는 기능을 구현할 때 활용할 수 있다. public func withLatestFrom(_ second: Source, resultSelector: @escaping (Element, Source.Element) throws -> ResultType) -> Observable {..

    RxSwift(24). startWith, concat, merge, combineLatest, zip

    startWith startWith는 옵저버블이 요소를 방출하기 전에 다른 항목들을 앞부분에 추가한다 주로 기본값이나 시작값을 지정할 때 활용된다. public func startWith(_ elements: Element ...) -> Observable { return StartWith(source: self.asObservable(), elements: elements) } startWith연산자의 파라미터는 가변파라미터이다. 파라미터로 전달하는 하나 이상의 값을 옵저버블 시퀀스 앞부분에 추가한다. 그런다음 새로운 옵저버블을 리턴한다. let numbers = [1, 2, 3, 4, 5] Observable.from(numbers) .startWith(-1, -2) .startWith(-3) .su..