【发布时间】:2018-08-03 06:05:09
【问题描述】:
这是我的代码:
class LoginUserResponse : Codable {
var result: String = ""
var data: LoginUserResponseData?
var mess: [String] = []
}
public class LoginUserResponseData : Codable {
var userId = "0"
var name = ""
}
现在,调用服务器 API 我正在解析这样的响应(使用 Stuff 库来简化解析):
do {
let loginUserResponse = try LoginUserResponse(json: string)
} catch let error {
print(error)
}
当我输入正确的密码时,我会得到这样的答案:
{"result":"success","data":{"userId":"10","name":"Foo"},"mess":["You're logged in"]}
这很好,解析器工作正常。
虽然提供错误的密码会给出以下答案:
{"result":"error","data":{},"mess":["Wrong password"]}
在这种情况下,解析器失败了。它应该将 data 设置为 nil,但它会尝试将其解码为 LoginUserResponseData 对象。
我在使用改造的 Android 上使用相同的方法,它工作正常。我宁愿不想将所有字段都设为可选。
有没有办法让解析器将空 json {} 视为 nil?或者将 LoginUserResponseData 设为非可选并且它只有默认值?我知道我可以为此创建一个自定义解析器,但我有大量这样的请求,而且需要太多额外的工作。
【问题讨论】:
-
您为什么希望解析器将 { } 视为 nil?这些不是一回事。
-
由于服务器 API,我无法更改它,因为它会破坏 android 应用程序。另一方面,android 上的改造理解为一个空对象。
标签: ios swift codable decodable