是否有一个 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(())
我有一个仅用于触发 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(())