2016-04-11 11 views
7

Tôi có một Đài quan sát chỉ được sử dụng để kích hoạt flatMap/map. Vì vậy, tôi chỉ cần sự kiện Next và không bao giờ là một giá trị. Tôi có thể sử dụng khái niệm của riêng tôi cho một giá trị rác như vậy, nhưng tôi tự hỏi nếu có một quy ước RxSwift cho nó.Có loại ưa thích nào cho Quan sát không cần giá trị trong các sự kiện Tiếp theo không?

Dưới đây là những gì tôi đang đối phó với:

// I'd rather not have an Element type that someone might use 
let triggeringObservable: Observable<SomeSessionClass> 

// ... 

triggeringObservable.map { _ -> String in // The actual value is ignored 
    return SomeLibrary.username() // `username()` is only ready when `triggeringObservable` sends Next 
} 

Trong ví dụ này, triggeringObservablerx_observer trên một số tài sản trong thư viện mà sẽ cho chúng tôi biết rằng username() đã sẵn sàng để được gọi.

Trả lời

9

Bạn chỉ cần sử dụng Observable<Void> cho mục đích này. Cũng giống như vậy:

let triggerObservable = Observable<Void>.just() 

    triggerObservable.subscribeNext() { 
     debugPrint("received notification!") 
    }.addDisposableTo(disposeBag) 

hoặc trong ví dụ của bạn:

let triggeringObservable: Observable<Void> 

// ... 

triggeringObservable.map { Void -> String in // The actual value is ignored 
    return SomeLibrary.username() 
} 
0

Với nhanh chóng 4, Xcode sẽ nói rằng bạn không thể gọi 'chỉ' không có đối số. chúng tôi hiện đang sử dụng workaround sau:

Observable.just(Void.self).subscribe(onNext: { Void -> String in 
     debugPrint("triggered!") 
    }).addDisposableTo(disposeBag) 
0

Trong Swift 4 (và có lẽ trước đó), bạn có thể vượt qua một tuple trống như một cuộc tranh cãi đến một phương pháp dự đoán một kiểu Void liên quan.

var triggerObservable = PublishSubject<Void>() 
... 
triggerObservable.onNext(()) // "()" empty tuple is accepted for a Void argument 

Hoặc bạn có thể xác định một phần mở rộng cho quá tải onNext() mà không args đối với trường hợp Void:

extension ObserverType where E == Void { 
    public func onNext() { 
     onNext(()) 
    } 
} 

... 
triggerObservable.onNext() 
Các vấn đề liên quan