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

Is there a preferred type for an Observable with no need for a value in Next events?

我有一个仅用于触发 flatMap/map 的 Observable。所以我只需要 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() 已准备好被调用。

为此,您可以简单地使用 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() 
}

对于 swift 4,Xcode 会说您不能不带参数调用 'just'。我们目前正在使用以下解决方法:

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

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

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

或者您可以定义一个扩展来重载 onNext(),对于 Void 情况没有参数:

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

...
triggerObservable.onNext()

这对我有用 Swift 4.1:

Observable<Void>.just(Void())

这对我有用 Swift 4.2:

Observable<Void>.just(())