RxCocoa 란?

UIKit 및 Cocoa 개발을 지원하는 Rx 클래스, RxSwift의 확장

기존 방식과 RxCocoa를 사용한 방식 비교

import UIKit
import RxSwift
import RxCocoa

class ViewController: UIViewController {
  
  // MARK: - Properties
  
  var disposeBag = DisposeBag()
  
  // MARK: - UI
  
  let someButton: UIButton = {
    let button = UIButton()
    return button
  }()
  
  // MARK: - Life Cycle
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    // 기존 방식을 사용한 처리방법
    self.someButton.addTarget(
      self,
      action: #selector(self.someButtonTouched(_:)),
      for: .touchUpInside
    )
    
    // RxCocoa를 사용한 처리방법
    self.someButton.rx.tap
      .bind { _ in
        // 버튼 액션
      }
      .disposed(by: self.disposeBag)
  }
  
  // MARK: - Event
  
  // 기존 방식을 사용한 touchUpInside 이벤트 처리방법
  @objc func someButtonTouched(_ sender: UIButton) {
    // 버튼 액션
  }
}

ObserverType

값을 주입(Inject)시킬 수 있는 타입

이벤트를 보내는 protocol 입니다.

Subject가 ObserverType을 채택하고 있기 때문에 이벤트를 보낼 수 있습니다.

ObserverType 구현체

/// Supports push-style iteration over an observable sequence.
public protocol ObserverType {
    /// The type of elements in sequence that observer can observe.
    associatedtype Element

    @available(*, deprecated, message: "Use `Element` instead.")
    typealias E = Element

    /// Notify observer about sequence event.
    ///
    /// - parameter event: Event that occurred.
    func on(_ event: Event<Element>)
}

/// Convenience API extensions to provide alternate next, error, completed events
extension ObserverType {
    
    /// Convenience method equivalent to `on(.next(element: Element))`
    ///
    /// - parameter element: Next element to send to observer(s)
    public func onNext(_ element: Element) {
        self.on(.next(element))
    }
    
    /// Convenience method equivalent to `on(.completed)`
    public func onCompleted() {
        self.on(.completed)
    }
    
    /// Convenience method equivalent to `on(.error(Swift.Error))`
    /// - parameter error: Swift.Error to send to observer(s)
    public func onError(_ error: Swift.Error) {
        self.on(.error(error))
    }
}

ObservableType

값을 관찰할 수 있는 타입

이벤트를 관찰하는 subscribe 함수가 있는 protocol 입니다.