ios - Swift 3 - 使用具有空值的结构模型保存 json
<p><p>我正在使用以 JSON 格式返回数据的 restful web 服务。这是样本数据:</p>
<pre><code>[
{
"name": "Mark E",
"categories": "process",
"id": 1,
"checkedOut": null,
"checkedOutBy": null
},
{
"name": "John",
"categories": null,
"id": 2,
"checkedOut": null,
"checkedOutBy": null
}
]
</code></pre>
<p>我正在使用此代码解析此 json。我也为此创建了结构模型。 </p>
<pre><code>let task = session.dataTask(with: url) { (data, response, error) in
var myModel = ()
if let HTTPResponse = response as? HTTPURLResponse {
let status = HTTPResponse.statusCode
if(status == 200) {
guard let data = data else {
print("No Data!!")
return completion(false, myModel)
}
guard let json = try! JSONSerialization.jsonObject(with: data, options: []) as? NSArray else {
print("Not an array")
return completion(false, myModel)
}
for jsondata in json {
guard let newdata = MyModel(json: jsondata) else {
continue
}
myModel.append(newdata)
}
completion(true,myModel)
}else {
completion(false,myModel)
}
}
}
task.resume()
</code></pre>
<p>这是我的数据模型结构</p>
<pre><code>struct MyModel {
var name : String
var categories : String
var id : Int
var checkedOut : String
var checkedOutBy : String
init?(json:Any) {
guard let myModel = json as? NSDictionary else {
return nil
}
guard let name = myModel["name"] as? String,
let id = myModel["id"] as? Int else {
return nil
}
self.name = author
self.id = id
// This is how I am handling the null values.
if let categories = myModel["categories"] as? String {
self.categories = categories
} else {
self.categories = ""
}
if let lastCheckedOut = myModel["lastCheckedOut"] as? String {
self.lastCheckedOut = lastCheckedOut
} else {
self.lastCheckedOut = ""
}
if let lastCheckedOutBy = myModel["lastCheckedOutBy"] as? String {
self.lastCheckedOutBy = lastCheckedOutBy
}else {
self.lastCheckedOutBy = ""
}
}
}
</code></pre>
<p>在 <code>struct MyModel</code> 中,我使用 <code>if let</code> 来检查空值。谁能建议我这是检查每个变量是否为空的正确方法?有没有其他方法可以做到这一点?</p>
<p>如果我使用 <code>guard</code> 检查空值,它不会将任何对象添加到数组中。 </p>
<p>如果值为 null,那么它只需将空字符 <code>""</code> 分配给该变量,它将添加到 MyModel 对象数组中。 </p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>检查特定类型并在失败时分配其他内容的常用方法是 <em>nil 合并运算符</em>:</p>
<pre><code>self.lastCheckedOut = myModel["lastCheckedOut"] as? String ?? ""
</code></pre>
<p>旁注:考虑 JSON <code>null</code> 被反序列化为 <code>NSNull</code> 而不是 <code>nil</code></p></p>
<p style="font-size: 20px;">关于ios - Swift 3 - 使用具有空值的结构模型保存 json,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/40951659/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/40951659/
</a>
</p>
页:
[1]