웰코발
웰코's iOS
웰코발
전체 방문자
오늘
어제
  • 분류 전체보기 (63)
    • Swift (26)
    • rxSwift (13)
    • SwiftUI (3)
    • iOS (12)
    • 기타 (1)
    • 개발관련 용어정리 (6)
    • 면접준비 (0)
    • 공공데이터 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 대기오염통계 현황
  • swiftUI
  • SWIFT
  • Observable
  • uitableview
  • collectionview
  • delay
  • alamofire
  • ios
  • rxswift
  • Scroll
  • UI
  • Coordinator
  • WKWebView
  • content_available
  • 측정소정보
  • 주제구독
  • 디자인
  • ReactorKit
  • cell

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
웰코발

웰코's iOS

[rxSwift] Observable create 하는 법
rxSwift

[rxSwift] Observable create 하는 법

2022. 10. 20. 19:04
  • create
    • Obseravble을 커스터마이징 하게 만드는 방법임.
    • create는 escaping 클로저로, escaping에서는 AnyObserver를 취한 뒤 Disposable을 리턴한다.
    • 여기서 AnyObserver란 generic 타입으로 Observable sequence에 값을 쉽게 추가할 수 있다.
var disposeBag = DisposeBag()

Observable.create { observer -> Disposable in
    observer.onNext(1)
    observer.on(.next(6))
    observer.onCompleted()
    onberver.onNext(9)
    
    return Disposables.create()
}
.subscribe {
    print($0)
}
.disposed(by: disposeBag)
// 1
// 6
// completed
enum MyError: Error {
    case anError
}

Observable.create { observer -> Disposable in 
    observer.onNext(1)
    observer.onError(MyError.anError)
    observer.onCompleted()
    observer.onNext(2)
    return Disposables.create()
}
.subscribe (
    onNext: {
        print($0)
    },
    onError: {
        print($0.localizedDescription)
    },
    onCompleted: {
        print("completed")
    },
    onDisposed: {
        print("disposed")
    }
)
// 1
// anError
// disposed

  • deferred
    • deferred 연산자는 Observable을 만들어내는 팩토리 클로저를 인자로 받음.
    • 실제 구독이 일어나는 시점에서야 실제 Observable을 만듦.
    • 즉, 실제 Observable이 만들어지는 시점이 미루어진다고 해서 ‘deferred’ 임.
var observableSwitch:Bool = false

// 대기 중이다가 subscribe한 시점에 Observable을 return 함
let observable = Observable<Int>.deferred {
    observableSwitch.toggle()
    
    if observableSwitch {
        // 실제 Observable이 여기서 만들어짐
        return Observable.from([1,2,3])
    } else {
        // 실제 Observable이 여기서 만들어짐
        return Observable.from([4,5,6])
    }
}

// observableSwitch 가 true
observable.subscribe { event in
    switch event {
    case let .next(value):
        print(value)
    default:
        print("finished")
    }
    
    }.disposed(by: bag)
// 1
// 2
// 3
// finished


// observableSwitch 가 false
observable.subscribe { event in
    switch event {
    case let .next(value):
        print(value)
    default:
        print("finished")
    }
    
    }.disposed(by: bag)
// 4
// 5
// 6
// finished

'rxSwift' 카테고리의 다른 글

[rxSwift] Subject 에 대한 이해와 종류  (0) 2022.10.21
[rxSwift] Dispose 는 왜 하는 걸까?  (0) 2022.10.20
[rxSwift] Observable subscribe 하는 법  (0) 2022.10.19
[rxSwift] 기본적인 Observable 의 종류  (0) 2022.10.19
[rxSwift] Observable 에 대한 이해  (0) 2022.10.18
    'rxSwift' 카테고리의 다른 글
    • [rxSwift] Subject 에 대한 이해와 종류
    • [rxSwift] Dispose 는 왜 하는 걸까?
    • [rxSwift] Observable subscribe 하는 법
    • [rxSwift] 기본적인 Observable 의 종류
    웰코발
    웰코발
    나의 개발 일지

    티스토리툴바