假设我有登录API,并且登录成功和登录失败的响应不同
我想用这种通用方式
目前,我具有调用API的方法,并且正在传递 T:Codable 来对响应进行编码
typealias completionResponse<T:Codable> = ((_ success:T?,_ error:Error?) -> Void)
static func login<T:Codable>(userName:String,password:String,completion:@escaping completionResponse<T>) {
self.performRequest(request: APIRouterUserModule.login(email: userName, password: password)) {(model) in
self.handleResponseCallCompletion(result: model, completion: completion)
}
}
现在,我创建了以下对象来解决此问题。
struct FailableResponse <T:Codable,E:Codable> : Codable {
var success:T?
var failure:E?
public init(from decoder:Decoder) throws {
let singleValue = try decoder.singleValueContainer()
success = try singleValue.decode(T.self)
failure = try singleValue.decode(E.self)
}
}
问题:
问题是假设登录成功,所以在这种情况下,我想要failure
应该为零。
对于登录失败,反之亦然,我想success
应该为零。
但是发生的事是没有一个都是nil ,success
和failure
都不是nil。但是其中的可选值都是nil
那么有什么解决方法吗?
提前感谢您的努力:)