我在Swift 1.2中使用NSJSONSerialization
來解析從API響應返回的一些json。用AnyObject初始化Swift類?來自NSJSONSerialization
var err: NSError?
let opts = NSJSONReadingOptions.AllowFragments
let json: AnyObject? = NSJSONSerialization.JSONObjectWithData(jsonData!, options: opts, error: &err)
解析的json的提供方式爲AnyObject?
。我想用這個可選項來初始化一個可以在應用程序中用作模型數據的類對象。
class Alerts {
let type: String
let date: String
let description: String
let expires: String
let message: String
init(json: AnyObject) {
if let
jsonDict = json as? [String: AnyObject],
alertsArray = jsonDict["alerts"] as? [AnyObject],
alertsDict = alertsArray[0] as? [String: AnyObject],
type = alertsDict["type"] as? String,
date = alertsDict["date"] as? String,
description = alertsDict["description"] as? String,
expires = alertsDict["expires"] as? String,
message = alertsDict["message"] as? String
{
self.type = type
self.date = date
self.description = description
self.expires = expires
self.message = message
}
else
{
self.type = "err"
self.date = "err"
self.description = "err"
self.expires = "err"
self.message = "err"
}
}
}
// example of creating a data model from the json
let alerts = Alerts(json: json!)
alerts.type
alerts.date
alerts.description
alerts.expires
alerts.message
由於NSJSONSerialization
返回一個可選的,我必須檢查每個值類型的存在,因爲我提取JSON數據。正如你在上面的代碼中看到的那樣,我使用了Swift 1.2改進的可選綁定來清理init
方法。如果沒有使用第三方庫,我還有什麼可以做的類模型(enums
,structs
,type aliases
),使其更具可讀性?我應該使用struct
作爲模型數據而不是class
?是否可以使用enum
或struct
來創建自定義類型來表示json對象?
我知道你提到你不想使用第三方庫,但我真的覺得你應該看看SwiftyJSON。它檢查你的一切,並給你一個嵌套的字典。就我個人而言,我將使用這種方法將JSON映射到使用Structs的swift模型,在init中分配數據並嵌套Structs,從「Root()」開始嵌套,然後從那裏開始下載。 – Cole
@Cole我知道SwiftyJSON和Argo,但我不想依賴它們。儘管使用'struct'代替swift模型可能是個好主意。 – wigging