是否有一个Observable的首选类型,在Next事件中不需要值?

时间:2016-04-11 19:24:56

标签: swift rx-swift reactivex

我有一个Observable,它仅用于触发flatMap / map。所以我只需要Next事件而不是价值。我可以将自己的概念用于这种垃圾价值,但我想知道它是否符合RxSwift惯例。

这是我正在处理的事情:

// 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
}

在此示例中,triggeringObservable在库中的某些属性上为rx_observer,告知我们username()已准备就绪。

5 个答案:

答案 0 :(得分:10)

您可以简单地使用Observable<Void>来实现此目的。像这样:

   let triggerObservable = Observable<Void>.just()

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

或在您的示例中:

let triggeringObservable: Observable<Void> 

// ...

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

答案 1 :(得分:3)

在Swift 4中(可能更早),您可以将空元组作为参数传递给期望Void关联类型的方法。

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

或者你可以定义一个扩展来重载onNext()而没有用于Void案例的args:

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

...
triggerObservable.onNext()

答案 2 :(得分:2)

这在Swift 4.1上对我有用:

Observable<Void>.just(Void())

答案 3 :(得分:1)

这在Swift 4.2上对我有用:

Observable<Void>.just(())

答案 4 :(得分:0)

使用swift 4,Xcode会说你无法调用&#39;只是&#39;没有参数。我们目前正在使用以下解决方法:

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