我有模型对象
class Person {
var name:String?
var lastName:String?
var adresss:String?
}
从服务器我得到包含一系列人的json响应。问题是某些人在名称中有值,有些json对象甚至没有字段名称。
在处理json时,我迭代JSON(数据:数据)并为每个人创建一个对象。
似乎有些人会有空名。
如何更好地处理这种情况,以便将来我的程序在引用没有名字的人之后不会崩溃。在class initializarion中设置默认值?或者在处理每个实例时展开每个人的领域?
答案 0 :(得分:1)
如果您有json
数据,则应使用guard
。例如:
guard let name = json["name"] as? String,
let lastName = json["lastName"] as? String,
let address = json["address"] as? String else { // Do what you like here if it fails for some of these values}
这样,如果所有三个值都成功,您可以使用变量name
,lastName
和address
。
如果您想设置一个空值并且每次都可以继续:
let name = json["name"] as String ?? "" etc..
我喜欢第一种方式。
答案 1 :(得分:0)
为了安全解开零值,你可以使用'?'或'如果让','守护'表达。 他们可以帮助避免零值。 强制解包使用'!',但它可能会出现异常
答案 2 :(得分:0)
这取决于你想要达到的目标。你有不同的可能性。
弃用空值
在这种情况下,如果他们没有有效信息,您可以放弃Person
。您可以更改代码:
class Person {
let name: String
let lastName: String
let address: String
}
当您收到json时,您可以简单地防范无效值:
guard
let name = jsonName as? String,
let lastName = jsonLastName as? String,
let address = jsonAddress as? String else { return }
使用可选值保存人员
在这种情况下,您可以使用自己的类和可选值,但每次使用它们都需要检查它们。
class Person {
var name: String?
var lastName: String?
var address: String?
}
您可以使用以下方式保存属性:
person.name = jsonName
person.lastName = jsonLastName
person.address = jsonAddress
即使jsonName
,jsonLastName
或jsonAddress
您的代码可以使用,因为您将其声明为可选代码。
使用默认值保存人员
在这种情况下,您可以使用自己的类和可选值,但每次使用它们都需要检查它们。
class Person {
var name: String
var lastName: String
var address: String
}
您可以使用以下方式保存属性:
person.name = jsonName ?? ""
person.lastName = jsonLastName ?? ""
person.address = jsonAddress ?? ""
如果jsonName
,jsonLastName
或jsonAddress
为零,则为默认值""将被保存。变量不再是可选的,因此您无需检查它们。