这是我的代码:
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 设置为非可选的,它只有默认值?我知道我可以为此创建一个自定义解析器,但是我有大量这样的请求,并且需要太多额外的工作。