首页 > 解决方案 > 迁移 RxSwift 以结合

问题描述

我正在从 RxSwift 迁移到 Combine 并遇到了与错误处理相关的问题:

func myMethod(firstName: String?) -> Observable<Data> {
     guard let firstName = firstName else {
     return Observable.error(MyErrorEnum.error)
    }
    return someAPICall... 
}

我正在迁移到组合如下:

func myMethod(firstName: String?) -> AnyPublisher<Data, Error> {
     guard let firstName = firstName else {
     // can't quite figure out how to return an error here... 
    }
    return someAPICall... 
}

我通常不会努力处理错误,特别是在处理网络呼叫时,但出于某种原因,这个错误正在避开我。

非常感谢任何输入!

标签: iosswiftrx-swiftcombine

解决方案


您可以使用Fail发布者:

func myMethod(firstName: String?) -> AnyPublisher<Data, Error> {
    guard let firstName = firstName else {
        return Fail<Data, Error>(error: MyErrorEnum.error).eraseToAnyPublisher()
    }
    return someAPICall... 
}

但我认为您的设计是最佳设计,您最好只需要一个非可选firstName的,并让调用者意识到您的方法不适用于 nil 值。


推荐阅读