我正在尝试为类创建一个可用的初始化程序.我的类将使用来自网络请求的输入进行初始化.网络不可靠,我想创建一个初始化程序,检查所有属性的存在,否则它将失败.
我试图在这里使用警卫,所以请随意指出方法中的任何明显错误:
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'
有关如何纠正此错误的任何想法?
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
| 归档时间: |
|
| 查看次数: |
12573 次 |
| 最近记录: |