我知道我可以創建failable初始化爲我的模型類從JSON數據的初始化:如何從JSON初始化模型類的自定義類型的屬性
struct Person {
let firstName: String
let middleName: String?
init?(JSONData data:[String:AnyObject]) {
guard let firstName = data["firstName"] as? String else { return nil }
self.firstName = firstName
self.middleName = data["middleName"] as? String
}
}
但如果我有另一個屬性在Person
這是另一個模型類的類型?例如:
struct Person {
let firstName: String
let car: Car
init?(JSONData data:[String: AnyObject]) {
guard let firstName = data["firstName"] as! String,
let car = data["car"] as! Car // this line doesn't work I guess
else {return nil}
self.firstName = firstName
self.car = car
}
}
汽車看起來是這樣的:
struct Car {
let year: Int
let brand: String
}
是什麼力量讓上面的JSON數據解析自定義類型Car
工作failable初始化的正確方法?
例如JSON:
{「firstName」: 「John」,
「car」: {
「year」: 2009,
「brand」: 「BMW」
}}
爲什麼'guard'我不能使用'as!',但必須使用'as?' –
這是因爲'guard'檢查給定的變量是否可選。 'as!'表示變量**將是一個隱含的解包可選**,所以這種「跳過問題」的「保護」要求。 – the4kman