我正在使用Swift 1.2中的NSJSONSerialization
来解析从API响应返回的一些JSON数据。
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对象?
struct
而不是class
可能是个好主意。 - wigging