我正在尝试为一个类创建一个可失败的初始化器。我的类将使用来自网络请求的输入进行初始化。网络不可靠,我想创建一个初始化程序来检查所有属性是否存在,否则会失败。
我在这里尝试使用守卫,所以请随时指出方法中的任何明显错误:
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
行编译失败,错误:
对成员“下标”的引用不明确
关于如何更正此错误的任何想法?
最佳答案
guard 需要一个符合 BooleanType 的条件。简单的分配没有。你会需要这样的东西。
guard let j = job["jobid"] as? String else {
throw InitializationError.MissingJobId
}
self.jobId = j
但是,您将收到错误消息“类实例的所有存储属性必须在从初始化程序中抛出之前进行初始化。”这在 The Swift Programming Language 中是预期的和记录的:
For classes, however, a failable initializer can trigger an initialization failure only after all stored properties introduced by that class have been set to an initial value and any initializer delegation has taken place.
Chris Lattner 在这里提到当前行为是不可取的:http://swift-language.2336117.n4.nabble.com/Swift-2-throwing-in-initializers-td439.html
关于ios - 字典中对成员 'subscript' 的引用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33689933/