gpt4 book ai didi

ios - 在 Swift 中将 JSON 转换为模型值

转载 作者:搜寻专家 更新时间:2023-10-30 21:51:04 25 4
gpt4 key购买 nike

为了进一步了解 Swift,我正在寻找改进我的应用程序的方法,并注意到我在一些地方做出了我可能不应该做的假设。

当创建一个新对象时,比方说一个“学生”,他们需要诸如姓名 (String)、年龄 (Int) 和分数 ( float )。我从 JSON 文件中读取这些,并将它们放入这样的对象中:

// note, details is a [String:Any] type
let name = details["name"] as! String
let age = details["age"] as! Int
let score = Float(details["score"])
self.student = Student(name: name, tutor_group: tutor_group, score: score)

所以我的问题如下;1. 我应该如何修改我的代码来检查如果一个值不是数字,在它应该在的地方,变量变成只是 nil,或者更好的 0?2.如果字典中的key不存在怎么办?3. 执行此操作的方法是否不同?如果是,哪种方法是最佳做法?

请注意,我想使此代码尽可能短 - 每行的 if/else 语句不是我想要的寻找。

提前致谢!

最佳答案

Swift 团队建议的解决方案

最近苹果described面对这个问题的建议方法。

你可以这样定义Student结构(或类)

struct Student {

let name: String
let age: Int
let score: Float

init?(json: [String:Any]) {
guard
let name = json["name"] as? String,
let age = json["age"] as? Int,
let score = json["score"] as? Float
else { return nil }
self.name = name
self.age = age
self.score = score
}
}

这种方法的好处

  1. 封装将 JSON 转换为 Student 的逻辑在 Student 结构本身中
  2. 如果 JSON 不包含有效数据(例如,没有包含有效 Intage 字段),则初始化程序失败并返回 nil。这意味着无法创建缺少字段的 Student(这是一件好事),并且这种情况不会导致崩溃。

更多

我上面链接的帖子还描述了一种更高级的方法,其中缺少字段/值会引发异常。但是,如果您不需要记录(或通知调用者)初始化失败的原因,则不需要这个。

关于ios - 在 Swift 中将 JSON 转换为模型值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39545456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com