我一直在研究解析JSON数据的结构,该数据来自Dark sky。当我正在研究它的时候,有些东西袭击了我的大脑并一直在思考它。
传统上,我们一直在使用指定的初始值设定项(尽管struct为您提供了免费的成员初始化程序)来实例化对象。但是,我们可以轻松地使用一个返回自身的静态函数,该函数会填充属性。
像这样:struct WeatherForecastData {
// Weather data
var apparentTemperature: Double?
var icon: String?
var precipProbability: Double?
var pressure: Double?
static func map(_ data: [String: AnyObject]) -> WeatherForecastData {
var p = WeatherForecastData()
p.apparentTemperature = data["apparentTemperature"] as? Double ?? nil
p.icon = data["icon"] as? String ?? nil
p.precipProbability = data["precipProbability"] as? Double ?? nil
p.pressure = data["pressure"] as? Double ?? nil
return p
}
}
注意静态方法,如果我们用指定的初始化器替换它,它将做与静态方法相同的事情。我的问题是我们何时应该使用静态方法来实例化一个对象而不是传统的指定初始化器?
答案 0 :(得分:0)
为什么你不使用像这样的自定义初始化程序?
struct WeatherForecastData {
var apparentTemperature: Double
var icon: String
var precipProbability: Double
var pressure: Double
init?(data:Dictionary<String,Any>) {
guard
let apparentTemperature = data["apparentTemperature"] as? Double,
let icon = data["icon"] as? String,
let precipProbability = data["precipProbability"] as? Double,
let pressure = data["pressure"] as? Double
else {
print("Invalid Data")
return nil
}
self.apparentTemperature = apparentTemperature
self.icon = icon
self.precipProbability = precipProbability
self.pressure = pressure
}
}