我正在嘗試爲類創建一個failable初始化程序。我的課程將使用來自網絡請求的輸入進行初始化。網絡不可靠,我想創建一個初始化程序來檢查所有屬性的存在性,否則就會失敗。詞典中對成員「下標」的歧義引用
我試圖利用後衛的位置,所以請隨時點在接近任何明顯的失誤:
public class JobModel {
let jobId: String
let status: String
let toName: String
let toAddress: String
let description: String
let fee: Int
let jobDate: NSDate
let fromName: String
let fromAddress: String
init?(job: [String:AnyObject]) throws {
guard self.jobId = job["jobid"] as! String else {
throw InitializationError.MissingJobId
}
}
}
的guard self.jobId
線無法編譯,錯誤: Ambiguous reference to member 'subscript'
關於如何糾正此錯誤的任何想法?
你想*不合格*(即返回'nil')或*拋*如果該屬性不存在,則出現錯誤?這是兩回事。 –
錯誤消息似乎是誤導性的:'guard'語句後面的表達式必須具有布爾結果或可選綁定('let'語法)的評估結果。考慮在調用初始化程序之前驗證輸入字典*。 – vadian
@MartinR,我更願意拋出一個錯誤,因爲初始化者的調用者會知道爲什麼初始化失敗,調用者不會返回nil的上下文。 –