我想将使用闭包编写的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/