对Dictionary上成员'下标'的模糊引用

Lui*_*ado 11 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
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

guard self.jobId行无法编译,错误: Ambiguous reference to member 'subscript'

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

Chr*_*ley 8

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

guard let j = job["jobid"] as? String else {
    throw InitializationError.MissingJobId
}
self.jobId = j
Run Code Online (Sandbox Code Playgroud)

但是,您将收到错误"必须在从初始化程序抛出之前初始化类实例的所有存储属性." 这是Swift编程语言的预期和记录:

但是,对于类,只有在该类引入的所有存储属性都已设置为初始值并且已执行任何初始化程序委派之后,可用的初始化程序才会触发初始化失败.

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