无法在 RxSwift 中使用通用结果枚举出错
Cannot put error with Generic Result enum in RxSwift
我正在尝试在 swift 中创建一个通用结果枚举,这是我目前所拥有的:
enum Result<T: Codable>: Error {
//Indicates that it was a success, and data is the returned result
case Success(data: T)
//Indicates that there was an unrecognizable error
case Failure(error: Error)
//Some cases for specific status codes
case Forbidden //Status code: 403
case NotAcceptable //Status code: 406
case Conflict //Status code: 409
case InternalServerError //Status code: 500
}
然后我尝试从中创建一个 Observable,如下所示:
(T 在函数的调用中指定,为简洁起见缩短)
Observable<Result<T>>.create { observer in
//Some code to go make an Http requests and return response....
switch response.result {
case .success(let value):
//This works fine
observer.onNext(Result.success(value))
observer.onCompleted()
case .failure(let error):
//This is where things go wrong.
observer.onError(Result.failure(error))
}
}
问题是当我在 .failure
情况下尝试 return 时,它总是说 Argument type 'Result<_>' does not conform to expected type 'Error'
即使结果是错误类型
我是不是做错了什么?
这个呢?
enum Result<T: Codable, E: Error> {
case Success(data: T)
case Failure(error: E)
// ...
}
我还删除了继承,因为当您实际用枚举大小写包装它时它没有任何意义。
您可能还想将网络代码放在 Observable.create
闭包内的某处,因为响应无法按顺序提供。相反,闭包像网络 request/response 那样转义顺序流。
除了你的大写无处不在之外......当你这样做时 Result.failure(anError)
编译器无法推断 T 的类型。要修复只需执行:Result<T>.failure(anError)
……还是应该Result<T>.Failure(error: anError)
?您将其大写并在定义中使用命名变量,但您使用小写并且不在使用它的地方使用命名变量。 :-(
我正在尝试在 swift 中创建一个通用结果枚举,这是我目前所拥有的:
enum Result<T: Codable>: Error {
//Indicates that it was a success, and data is the returned result
case Success(data: T)
//Indicates that there was an unrecognizable error
case Failure(error: Error)
//Some cases for specific status codes
case Forbidden //Status code: 403
case NotAcceptable //Status code: 406
case Conflict //Status code: 409
case InternalServerError //Status code: 500
}
然后我尝试从中创建一个 Observable,如下所示: (T 在函数的调用中指定,为简洁起见缩短)
Observable<Result<T>>.create { observer in
//Some code to go make an Http requests and return response....
switch response.result {
case .success(let value):
//This works fine
observer.onNext(Result.success(value))
observer.onCompleted()
case .failure(let error):
//This is where things go wrong.
observer.onError(Result.failure(error))
}
}
问题是当我在 .failure
情况下尝试 return 时,它总是说 Argument type 'Result<_>' does not conform to expected type 'Error'
即使结果是错误类型
我是不是做错了什么?
这个呢?
enum Result<T: Codable, E: Error> {
case Success(data: T)
case Failure(error: E)
// ...
}
我还删除了继承,因为当您实际用枚举大小写包装它时它没有任何意义。
您可能还想将网络代码放在 Observable.create
闭包内的某处,因为响应无法按顺序提供。相反,闭包像网络 request/response 那样转义顺序流。
除了你的大写无处不在之外......当你这样做时 Result.failure(anError)
编译器无法推断 T 的类型。要修复只需执行:Result<T>.failure(anError)
……还是应该Result<T>.Failure(error: anError)
?您将其大写并在定义中使用命名变量,但您使用小写并且不在使用它的地方使用命名变量。 :-(