【发布时间】:2019-12-14 12:39:33
【问题描述】:
我正在尝试向后端发出一个简单的登录请求。后端返回一个 JSON 对象,由一个状态码、一个字符串消息和一个每次登录成功的访问令牌组成。
为此,我创建了以下struct:
struct AuthResponse: Decodable {
enum CodingKeys: String, CodingKey {
case code, message
case accessToken = "access_token"
}
let code: Int, message: String, accessToken: String?
}
当登录失败并且服务器未发送访问令牌时,AuthResponse 对象设法正确解码,nil 用于 accessToken 属性,正如我所期望的那样。例如,以下响应解码成功:
代码 = 400;
message = "用户未注册";
但是对于带有访问令牌的响应,比如这个:
"access_token" = TheAccessToken;
代码 = 200;
message = "登录成功";
AuthResponse 对象没有解码失败。
为什么会这样?这是否与 accessToken 属性是可选的这一事实有关?我也尝试过覆盖解码初始化程序并实现decodeIfPresent(_:forKey:) 并解开属性,但似乎都没有帮助。
提前致谢。
【问题讨论】:
-
这里的目的是什么?你想达到什么目的?好像没看懂
-
您应该考虑为此使用某种
Result。但如果你希望它是nil,let accessToken: String?就足够了。 -