成员'下标'在词典中的歧义引用

我正在尝试为一个类创build一个failable的初始化程序。 我的课程将使用来自networking请求的input进行初始化。 networking是不可靠的,我想创build一个初始化程序检查存在的所有属性,否则失败。

我想在这里使用警卫,所以请随时指出方法中的任何明显的错误:

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'

任何想法如何纠正这个错误?

守卫需要一个符合布尔型的条件。 简单的分配不。 你需要这样的东西。

 guard let j = job["jobid"] as? String else { throw InitializationError.MissingJobId } self.jobId = j 

然而,那么你会得到错误“一个类实例的所有存储的属性必须初始化之前被初始化”。 这是Swift编程语言:

然而,对于类,只有在该类引入的所有存储属性都被设置为初始值并且发生了任何初始化代理后,才能触发初始化失败。

克里斯·莱特纳(Chris Lattner)提到目前的行为在这里是不受欢迎的: http : //swift-language.2336117.n4.nabble.com/Swift-2-throwing-in-initializers-td439.html