来自swiftyjson的对象 - 如何更好地处理空值?

时间:2016-10-27 14:58:29

标签: ios swift swifty-json

我有模型对象

class Person  {
  var name:String?
  var lastName:String?
  var adresss:String?
}

从服务器我得到包含一系列人的json响应。问题是某些人在名称中有值,有些json对象甚至没有字段名称。

在处理json时,我迭代JSON(数据:数据)并为每个人创建一个对象。

似乎有些人会有空名。

如何更好地处理这种情况,以便将来我的程序在引用没有名字的人之后不会崩溃。在class initializarion中设置默认值?或者在处理每个实例时展开每个人的领域?

3 个答案:

答案 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}

这样,如果所有三个值都成功,您可以使用变量namelastNameaddress

如果您想设置一个空值并且每次都可以继续:

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

即使jsonNamejsonLastNamejsonAddress您的代码可以使用,因为您将其声明为可选代码。

使用默认值保存人员

在这种情况下,您可以使用自己的类和可选值,但每次使用它们都需要检查它们。

class Person {
    var name: String
    var lastName: String
    var address: String
}

您可以使用以下方式保存属性:

person.name = jsonName ?? ""
person.lastName = jsonLastName ?? ""
person.address = jsonAddress ?? ""

如果jsonNamejsonLastNamejsonAddress为零,则为默认值""将被保存。变量不再是可选的,因此您无需检查它们。