23

我有一个 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()已准备好被调用。

4

5 回答 5

19

您可以简单地使用 anObservable<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() 
}
于 2016-04-12T19:00:46.193 回答
8

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

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

或者,您可以为 Void 情况定义一个不带参数的重载 onNext() 扩展:

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

...
triggerObservable.onNext()
于 2017-12-28T20:58:58.460 回答
6

这在 Swift 4.2 上对我有用:

Observable<Void>.just(())
于 2019-06-07T04:00:38.093 回答
6

这在 Swift 4.1 上对我有用:

Observable<Void>.just(Void())
于 2019-02-28T19:10:05.363 回答
0

使用 swift 4,Xcode 会说你不能在没有参数的情况下调用“just”。我们目前正在使用以下解决方法:

    Observable.just(Void.self).subscribe(onNext: { Void -> String in
        debugPrint("triggered!")
    }).addDisposableTo(disposeBag)
于 2017-12-20T10:55:00.237 回答