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

问题描述 投票:10回答:5

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

swift rx-swift reactivex
5个回答
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() 
}

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()

3
投票

这在Swift 4.1上对我有用:

Observable<Void>.just(Void())

1
投票

这对我在Swift 4.2上有用:

Observable<Void>.just(())

0
投票

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

    Observable.just(Void.self).subscribe(onNext: { Void -> String in
        debugPrint("triggered!")
    }).addDisposableTo(disposeBag)
© www.soinside.com 2019 - 2024. All rights reserved.