对成员'下标'的模糊引用在字典

时间:2015-11-13 09:53:50

标签: ios swift swift2

我正在尝试为类创建一个可用的初始化程序。我的类将使用来自网络请求的输入进行初始化。网络不可靠,我想创建一个初始化程序,检查所有属性的存在,否则它将失败。

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

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'

有关如何纠正此错误的任何想法?

1 个答案:

答案 0 :(得分:8)

guard需要符合BooleanType的条件。简单的任务没有。你需要这样的东西。

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

然而,您将收到错误“必须在从初始化程序抛出之前初始化类实例的所有存储属性。”这是期望的,并在The Swift Programming Language中记录:

  

但是,对于类,可用的初始化程序可以触发   只有在引入所有存储属性后才初始化失败   该类已设置为初始值和任何初始化程序   代表团已经举行。

Chris Lattner提到目前的行为是不受欢迎的:http://swift-language.2336117.n4.nabble.com/Swift-2-throwing-in-initializers-td439.html