【问题标题】:ReSwift ActionCreator with callback / returning observable after dispatch带有回调的 ReSwift ActionCreator / 在调度后返回 observable
【发布时间】:2025-12-29 09:20:16
【问题描述】:

我正在使用ReSwiftRxSwift(如果没有这些信息,这个问题就没有多大意义)。

有没有一种标准的方式在 ReSwift 中分派动作创建者并在其完成处理后发生某些事情(即,完成处理动作以及动作创建者内部可能发生的所有内部请求)?

我确实知道实现此目的的一种方法:

func myActionCreator(_ callback: () -> Void) -> (state: AppState, store: Store<AppState>) -> Action? {
    return { state, store in
        _ = someRequest().subscribe(onNext: { _ in
            callback()
        })

        return nil
    }
}

store.dispatch(myActionCreator({
    // callback
}))

但这有两个问题:

  1. 我宁愿使用标准方式
  2. 我还需要将此回调作为 Observable 对象。

为了解释第二个原因,我需要这样的东西:

let observable = store.dispatch(myActionCreator)

所以我可以随意使用observable 变量。

当然,我可以自己实现所有这些日志记录,并使用store.dispatchReturningObservable 之类的东西作为Store 的扩展,但我正在寻找一种更简单的方法。

有吗?

【问题讨论】:

    标签: swift rx-swift swift4 reswift


    【解决方案1】:

    我想出的最佳解决方案是:

    extension Store {
    
        func dispatchObservable(_ callbackActionCreator: @escaping (@escaping () -> Void) -> (State, Store<State>) -> Action?) -> Observable<State> {
            return Observable.create({ observer in
                let actionCreator = callbackActionCreator({
                    observer.onNext(self.state)
                    observer.onCompleted()
                })
    
                self.dispatch(actionCreator)
    
                return Disposables.create()
            })
        }
    
    }
    

    我不会接受这个答案,因为我还在寻找更简单/更标准的方式。

    【讨论】: