我正在运行一个服务,当我遇到错误时,它应该向我显示来自后端的错误消息。到目前为止,我已经这样做了,而且效果很好。
然而,我想知道是否可以解析枚举中的返回错误,或者类似的东西,这样我就不必调用response.errors.result……但我不知道如何在出现错误时稍后获取来自返回的消息字符串。
另一方面,我有一个问题,当服务中的可选值为nil时,是否可以不使用默认值。我指的是我必须执行的情况??错误突变(代码:10,消息:"错误"(。如果存在一种我不必传递默认值的方式。
struct ResponseData: Codable {
let data: Data?
let errors: Errors?
}
struct Data: Codable {
let result: Mutation?
}
struct Mutation: Codable {
let id: String?
let active: Bool?
}
struct Errors: Codable, Error {
let result: [ErrorMutation]?
}
struct ErrorMutation: Codable, Error {
let code: Int?
let message: String?
}
final class MutationManager: Service {
func getTDMutation() -> Observable<Result<Mutation, ErrorMutation>> {
let mutationQuery = Bundle.main.value ?? ""
let body = ["query": "mutation (mutationQuery)"]
return response(body: body)
.map {
try JSONDecoder().decode(ResponseData.self, from: $0) }
.flatMap { response -> Observable<Result<Mutation, ErrorMutation>> in
guard response.data != nil else {
let error = response.errors?.result.first
return .just(.failure(error ?? ErrorMutation(code: 10, message: "error")))
}
return .just(.success(response.data?.result ?? Mutation(id: "", active: false)))
}
}
}
使用Codable进行解析,您必须像这样重写ResponseData类和Dataclass的代码。
struct ResponseData: Codable {
let dataMutation: DataMutation?
let errors: Errors?
private enum CodingKeys : String, CodingKey {
case errors, dataMutation = "data"
}
}
struct DataMutation: Codable {
let result: Mutation?
}