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) {
// 버튼 액션
}
}
값을 주입(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))
}
}
값을 관찰할 수 있는 타입
이벤트를 관찰하는 subscribe 함수가 있는 protocol 입니다.