ios - 使用 RxSwift 的 API 函数

标签 ios swift rx-swift

我想将使用闭包编写的API请求代码更改为RxSwift。
例如,我想使用 getList() 函数来制作 rxGetList() 函数。

// This function cannot be modified.
func getList(success: @escaping ([String]) -> Void,
             failure: @escaping (Error) -> Void) {
    // Request to Server...
}

func rxGetList() -> Observable<String> {
    // Using getList() function
    // TODO
}

我应该在 TODO 部分写什么代码? 请给我一些建议。

最佳答案

满足您的期望的最简单方法是使用如下内容:

func rxGetList() -> Observable<String> {
        return Observable.create { observer in
            
            getList(success: { result in
                for everyString in result {
                    observer.onNext(everyString)
                }
                observer.onCompleted()
            }, failure: { error in
                observer.onError(error)
            })
            
            return Disposables.create() {
                // specify any action to be performed on observable dispose (like cancel URL task)
            }
        }
    }

请注意,您已将 [String] 指定为 success 闭包的输入类型。如果不是拼写错误,那么上面的代码就适合。如果您想要一个String,那么就像这样简单:

func rxGetList() -> Observable<String> {
        return Observable.create { observer in
            
            getList(success: { result in
                observer.onNext(result)
                observer.onCompleted()
            }, failure: { error in
                observer.onError(error)
            })
            
            return Disposables.create() {
                // specify any action to be performed on observable dispose (like cancel URL task)
            }
        }
    }

关于ios - 使用 RxSwift 的 API 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65158144/

相关文章:

ios - 检测处理器 ArmV7 与 ArmV7s。 objective-C

iphone - 将 pbm 文件转换为 IplImage

ios - 我需要在 Nib 之间使用自定义转场

swift - 无法在 Alamofire 中禁用缓存(Xcode 9 - swift 4)

函数或类中的 Swift try-catch 处理

ios - 如何使用 Alamofire 和 Rxswift 等待异步 api 响应?

ios - UICollectionView indexPath.row 奇怪的行为

swift - 为什么 rx.text/rx.observe/rx.etc 不可用 (RxSwift)

ios - RxSwift 跟踪多个 observables 事件

ios - 如何让这个 segue 动画退出到右侧或左侧? - swift