我有一个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()
已经准备好被调用了。
你可以简单地使用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中(可能更早),您可以将空元组作为参数传递给期望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()
这在Swift 4.1上对我有用:
Observable<Void>.just(Void())
这对我在Swift 4.2上有用:
Observable<Void>.just(())
使用swift 4,Xcode会说你不能在没有参数的情况下调用'just'。我们目前正在使用以下解决方法:
Observable.just(Void.self).subscribe(onNext: { Void -> String in
debugPrint("triggered!")
}).addDisposableTo(disposeBag)