• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - Swift 3 - 使用具有空值的结构模型保存 json

[复制链接]
菜鸟教程小白 发表于 2022-12-12 12:30:43 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在使用以 JSON 格式返回数据的 restful web 服务。这是样本数据:

[
{
    "name": "Mark E",
    "categories": "process",
    "id": 1,
    "checkedOut": null,
    "checkedOutBy": null
},
{
    "name": "John",
    "categories": null,
    "id": 2,
    "checkedOut": null,
    "checkedOutBy": null
}
]

我正在使用此代码解析此 json。我也为此创建了结构模型。

let task = session.dataTask(with: url) { (data, response, error) in
        var myModel = [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()

这是我的数据模型结构

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 = ""
    }
  }
}

struct MyModel 中,我使用 if let 来检查空值。谁能建议我这是检查每个变量是否为空的正确方法?有没有其他方法可以做到这一点?

如果我使用 guard 检查空值,它不会将任何对象添加到数组中。

如果值为 null,那么它只需将空字符 "" 分配给该变量,它将添加到 MyModel 对象数组中。



Best Answer-推荐答案


检查特定类型并在失败时分配其他内容的常用方法是 nil 合并运算符:

self.lastCheckedOut = myModel["lastCheckedOut"] as? String ?? ""

旁注:考虑 JSON null 被反序列化为 NSNull 而不是 nil

关于ios - Swift 3 - 使用具有空值的结构模型保存 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40951659/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap