Swift Codable创建失败的通用结构

时间:2019-02-13 05:24:42

标签: swift generics codable

假设我有登录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 successfailure都不是nil。但是其中的可选值都是nil

那么有什么解决方法吗?

提前感谢您的努力:)

0 个答案:

没有答案