2016-10-27 4 views
1

저는 반응 패턴에 대해 새로운 것 같아서 이제는 더 큰 문제가 생겼습니다.RXSwift eventlistener

나는 반응적인 방식으로 몇 가지 비 외적인 요청을했습니다. 하지만 지금 내가해야 할 일은 "이벤트 리스너"입니다.

나는 SessionEventListener 프로토콜이있는 순간에 Session 개체가 있습니다. Session은 리스너 목록을 가지고 있으며 성공적인 로그인과 로그 아웃에 대해 모두 알려줍니다. 이 청취자는 가입 및 탈퇴 할 수 있습니다. 지금 내가 반작용으로 만들고 싶은이 일.

어떻게 하시겠습니까? 이 로그 아웃 된 경우

public let loginEventBehaviourSubject = BehaviorSubject(value: true) 

가 지금은 세션이 로그인 경우는 true, 거짓 onNext 보낼 수 있습니다 :


내 아이디어는 BehaviourSubject을 정의하는 것입니다

loginEventBehaviourSubject.onNext(true) // on login 
loginEventBehaviourSubject.onNext(false) // on logout 

그리고 내 "청취자"가 구독 할 수 있습니다.

하지만 모든 이벤트에 대한 주제를 가지고 prefere 것 :

public let loginEventBehaviourSubject = BehaviorSubject(value:) 
public let logoutEventBehaviourSubject = BehaviorSubject(value:) 

를하지만 그때 난 인터뷰 부울이 필요합니다. 실제 데이터를 제출하지 않고 "이벤트"를 발생시키는 일종의 "빈"Subject를 만들 수 있습니까?

그리고 마지막 질문 : Subject의 초기화 프로그램에 인스턴스를 추가해야하는 이유는 무엇입니까? 내가 만들 수없는 이유는 무엇입니까? BehaviourSubject<Bool>()?

답변

1

행동 특성이 API이기 때문에 행동 특성에 초기 값을 부여해야합니다. 실제로 T을 반환하는 BehaviorSubject<T>.value() 메서드를 정의합니다. 적절한 초기 값없이 value으로 전화하는 것은 의미가 없습니다. 제시된 경우에, 나는 PublishSubject이 당면 과제를보다 잘 표현한 것이라고 생각한다. reactivex 웹 사이트에서 more documentation on the available kinds of subjects을 찾을 수 있습니다. 당신이 피사체의 .next 이벤트에만 관심이 있다면

, 당신이 let loginSubject = PublishSubject<Void>() 할 수있는 (사용 행동 주제를, 당신은 BehaviorSubject<Void>(value:())를 작성했습니다 수)과 loginSubject.onNext()를 호출 할 수 있습니다.


주체는 대개 반 패턴입니다. 사실 피사체는 명령 적 세계에서 반응 적 세계로 다리를 놓기위한 대부분의 시간이며, 종종 다른 관측 가능 물의 조합으로 loginEventObservable 같은 것을 만들 수 있습니다. 이에 대한 자세한 내용은 To Use Subject Or Not To Use Subject?을 읽는 것이 좋습니다. Rx의 .Net 구현을 사용하여 작성되었지만 이론은 동일하게 유지됩니다.