Signal, Drive

XELPINE·2023년 1월 18일
0

개발 이야기

목록 보기
3/3


Overall

Signal과 Drive는 모두 Observable 소속이다.
다만 단독으로 사용되기 보다는 Relay와 Subject를 Observable로 형변환하는 과정에서 더 주로 쓰인다.
두녀석의 공통점은 모두 subscribe 후 main thread 실행을 보장해준다.



Signal

struct Output {
        var AAASignal : Signal<Bool>
    }
    
  
private var AAARelay = BehaviorRelay<Bool>(value: false)

AAARelay.asSignal()

형식으로 Relay를 구독하는 형태로 사용할 수 있다.

MVVM에서는 ViewModel의 데이터를 Relay로 관리하다 Signal이나 Driver로 구독한다.

output.AAARelay.emit(onNext: { [weak self] value in
            print ("===== ViewController AAARelay emit : \(value)")
            
            self?.btnIDSave.isSelected = value
        })

구독은 emit() 함수로 한다.



Driver

struct Output {
        var AAADriver : Driver<Bool>
    }
    
  
private var AAARelay = BehaviorRelay<Bool>(value: false)

AAARelay.asDriver()

사용방식은 Signal과 거의 동일하다.

output.AAARelay.drive(onNext: { [weak self] value in
            print ("===== ViewController AAARelay drive : \(value)")
            
            self?.btnIDSave.isSelected = value
        })

구독은 drive() 함수로 한다.



Signal vs Driver

두 녀석의 가장 큰 차이는 구독 시에 발행되는 값의 차이다.
Driver는 구독 즉시 최신값을 발행한다.
Signal은 구독 이후에 값들만을 감시하여 발행한다.

profile
iOS / Android Programmer

0개의 댓글