[英]Failable initializer for convenience init fails
I have the following NSDate
extension initializer to create a NSDate
object from a given string. 我有以下NSDate
扩展初始化程序来从给定的字符串创建NSDate
对象。
extension NSDate {
convenience init(string: String) {
let dateStringFormatter = NSDateFormatter()
dateStringFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let date = dateStringFormatter.dateFromString(string)
self.init(timeInterval:0, sinceDate:date!)
}
}
But the call to self.init
method force unwraps the date
variable which is not safe. 但是对self.init
方法的调用强制解包不安全的date
变量。 So I'm trying to make this a failable initializer. 所以我试图让它成为一个可用的初始化器。
extension NSDate {
convenience init?(string: String) {
let dateStringFormatter = NSDateFormatter()
dateStringFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
guard let date = dateStringFormatter.dateFromString(string) else {
return nil
}
self.init(timeInterval:0, sinceDate:date)
}
}
But it crashes with a EXC_BAD_ACCESS error at the nil
returning line. 但它在nil
返回行时因EXC_BAD_ACCESS错误而崩溃。 I can't figure out why. 我无法弄清楚为什么。
What am I doing something wrong here? 我在这做错什么?
If you use extension
you need to initialize the "superclass" before returning nil. 如果使用extension
,则需要在返回nil之前初始化“超类”。 See 看到
convenience init?(string: String) {
let dateStringFormatter = NSDateFormatter()
dateStringFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
guard let date = dateStringFormatter.dateFromString(string) else {
self.init()
return nil
}
self.init(timeInterval:0, sinceDate:date)
}
All of a class's stored properties—including any properties the class inherits from its superclass—must be assigned an initial value during initialization. 所有类的存储属性(包括该类从其超类继承的任何属性)都必须在初始化期间分配初始值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.