我有一个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()
已准备就绪。
答案 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)