我有以下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!)
}
}
但是对self.init
方法的调用会强制解包不安全的date
变量。所以我试图让它成为一个可用的初始化器。
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)
}
}
但它在nil
返回行时因 EXC_BAD_ACCESS 错误而崩溃。我无法弄清楚原因。
我在这里做错了什么?
答案 0 :(得分:-1)
如果使用extension
,则需要在返回nil之前初始化“超类”。见
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)
}
docs州
所有类的存储属性 - 包括该类从其超类继承的任何属性 - 必须在初始化期间分配初始值。