2016-08-28 34 views
0

比方說,我有一個叫人等級:如何在創建類對象時處理缺失值?

class Person: NSObject { 
    let name:String 
    let gender:String 
    let age:Int 

    init(name: String, gender: String, age: Int) { 
     self.name = name 
     self.gender = gender 
     self.age = age 
    } 

    class func createPerson(person:[String:AnyObject]) -> Person { 
     let name = person["name"] as? String 
     let gender = person["gender"] as? String 
     let age = person["age"] as? Int 

     return Person(name: name!, gender: gender!, age: age!) 
    } 
} 

我檢索一個JSON終點,我想轉換爲類「人」的對象的數據。我使用類函數「createPerson」來做到這一點。

處理URL端點缺少值的情況的最佳方式是什麼?

至於我的代碼目前維持,這條線將如果值之一是缺少程序崩潰:

return Person(name: name!, gender: gender!, age: age!) 

我知道這是因爲我力展開的變量,但我應該怎麼構建我的代碼說明變量值可能丟失的事實?

我應該聲明一切爲可選嗎?

let name:String? 
let gender:String? 
let age:Int? 

init(name: String?, gender:String?, age:Int?) { 
    self.name = name 
    self.gender = gender 
    self.age = age 
} 

建議表示讚賞。謝謝!

+0

喲你可以使用使用ObjectMapper,並且無需聲明爲可選 – Byte

回答

1

無需編寫類的功能來創建自定義的初始化:

let entity = Person() 
if let name = person["name"] as? String { 
    entity.name = name 
} 
if let gender = person["gender"] as? String { 
    entity.gender = gender 
} 
if let age = person["age"] as? Int { 
    entity.age = age 
} 
+0

我不需要一個自定義的初始化代碼清潔? – user3353890

+0

@ user3353890沒有。自定義init不會使代碼更清晰,除非您在項目中的多個位置初始化對象。 –

+0

謝謝!這很容易成長 – user3353890

1

這裏是你使用對象映射

import Foundation 
import ObjectMapper 

class PersonMapping: Mappable { 

// MARK: - Variables & Constants  

var name : String 
var gender : String 
var age : Int 

required init?(_ map: Map) { 

name = "" 
gender = "" 
age = 0 

} 

func mapping(map: Map) { 

    name     <- map["name"] 
    gender     <- map["gender"] 
    age      <- map["age"] 

} 
} 

的一個例子,你可以用它作爲

// result is your JSON object 
if let data = Mapper<PersonMapping>().map(result){ 
       print(data.name) 
       print(data.gender) 
       print(data.age) 

      } 

希望它有幫助:-)

+0

謝謝你的答案!我選擇了下面的方法,但我感謝你的時間和工作! :) – user3353890