Ben*_*Ben 7 xcode ios swift swift3
在我寻求更多关于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)
Run Code Online (Sandbox Code Playgroud)
所以我的问题如下; 1.我应该如何修改我的代码以检查如果一个值不是一个数字,它应该在哪里,变量变得正常nil,甚至更好0?2.如果词典中的键不存在怎么办?3.有不同的方法,如果是这样,哪种方法最佳?
请注意,我想保留这个代码尽可能短- if/ else每行语句是不是我要找的.
非常感谢你提前!
最近Apple 描述了面对这个问题的建议方法.
您可以通过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
}
}
Run Code Online (Sandbox Code Playgroud)
Student内部的逻辑StudentJSON不包含有效数据(例如,没有age有效的字段Int)则初始化程序失败并返回nil.这意味着没有办法创建一个Student缺少字段(这是一件好事),这种情况不会导致崩溃.我上面也挂帖子描述了一个更先进的方法,其中丢失的字段/值抛出异常.但是,如果您不需要记录(或通知调用方)为什么初始化失败,则不需要此操作.