2016-10-27 33 views
-1

我的模型對象swiftyjson的對象 - 如何更好地處理空值?

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

從服務器我得到它包含人的陣列JSON響應。問題是有些人的名字裏面有值,有些json對象甚至沒有字段名。

在處理json時,我在JSON(data:data)上迭代併爲每個人創建一個對象。

似乎有些人會有空的名字。

如何更好地處理這種情況,以便將來我的程序不會在引用沒有名字的人之後崩潰。在類initializarion中設置默認值?或者在處理每個實例時解開每個人的領域?

+0

提供一個示例,您想如何使用它們。 – Vyacheslav

回答

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.. 

我雖然prefere第一種方式。

0

在swift中爲了安全打開零值你可以使用'?'或'如果讓','警惕讓'表達。 他們可以幫助避免零值。 要強制展開使用'!',但它可能會導致異常

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是零,則默認值 「」 將被保存。變量不再是可選的,所以你不必檢查它們。