我正在尝试为类创建一个可失败的初始化程序。我的类将使用网络请求的输入进行初始化。网络不可靠,我想创建一个初始化程序来检查所有属性是否存在,否则会失败。
我试图在这里使用守卫,所以请随时指出该方法中任何明显的错误:
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
}
}
}
The guard self.jobId
行无法编译,出现错误:Ambiguous reference to member 'subscript'
关于如何纠正这个错误有什么想法吗?
Guard 需要符合 BooleanType 的条件。简单的分配则不然。你需要这样的东西。
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 http://swift-language.2336117.n4.nabble.com/Swift-2-throwing-in-initializers-td439.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)