NSDate 变量为 nil
NSDate variable as nil
Person class 的初始化方法看起来像
init (id:int64, firstName:String, lastName:String, birthDay:NSDate?)
如您所见,生日是可选的,因为我们并不总是有生日。
数据来自 SQLite 数据库。 SQLite 中不存在日期类型,因此日期表示为字符串(可以为 NULL)。为了将该字符串转换为 NSDate,我创建了 NSDate 的扩展:
extension NSDate: Value {
public class var declaredDatatype: String {
return String.declaredDatatype
}
public class func fromDatatypeValue(stringValue: String) -> NSDate {
return SQLDateFormatter.dateFromString(stringValue)!
}
public var datatypeValue: String {
return SQLDateFormatter.stringFromDate(self)
}
}
所以在创建人物时:
let person = Person(id: row[id], firstName: row[first_name], lastName: row[last_name], birthDay:NSDate.fromDatatypeValue(row[birthday]!))
如果生日字符串为 NULL,将失败。 (我必须打开行[生日]!作为一个非可选字符串,并且这个may/can不会改变)
所以我的想法是在创建人之前对此进行测试
var birthday : NSDate
if let birthdayString = row[Person.birthday] {
birthday = NSDate.fromDatatypeValue(birthdayString)
} else {
birthday=nil
}
并在初始化函数中使用生日。
但是 swift 告诉我:无法将类型 'nil' 的值分配给 'NSDate'
的值
如何解决这个问题?
PS。 :我知道我可以有一个 if 和 2 个初始化器,但我宁愿没有,因为我的 Person init func 有 12 个参数(为了简单起见,我在上面只使用了 4 个)并且维护这是一个 pita
执行以下操作。
var birthday : NSDate? = nil
if let birthdayString = row[Person.birthday] {
birthday = NSDate.fromDatatypeValue(birthdayString)
}
Person class 的初始化方法看起来像
init (id:int64, firstName:String, lastName:String, birthDay:NSDate?)
如您所见,生日是可选的,因为我们并不总是有生日。
数据来自 SQLite 数据库。 SQLite 中不存在日期类型,因此日期表示为字符串(可以为 NULL)。为了将该字符串转换为 NSDate,我创建了 NSDate 的扩展:
extension NSDate: Value {
public class var declaredDatatype: String {
return String.declaredDatatype
}
public class func fromDatatypeValue(stringValue: String) -> NSDate {
return SQLDateFormatter.dateFromString(stringValue)!
}
public var datatypeValue: String {
return SQLDateFormatter.stringFromDate(self)
}
}
所以在创建人物时:
let person = Person(id: row[id], firstName: row[first_name], lastName: row[last_name], birthDay:NSDate.fromDatatypeValue(row[birthday]!))
如果生日字符串为 NULL,将失败。 (我必须打开行[生日]!作为一个非可选字符串,并且这个may/can不会改变)
所以我的想法是在创建人之前对此进行测试
var birthday : NSDate
if let birthdayString = row[Person.birthday] {
birthday = NSDate.fromDatatypeValue(birthdayString)
} else {
birthday=nil
}
并在初始化函数中使用生日。
但是 swift 告诉我:无法将类型 'nil' 的值分配给 'NSDate'
的值如何解决这个问题?
PS。 :我知道我可以有一个 if 和 2 个初始化器,但我宁愿没有,因为我的 Person init func 有 12 个参数(为了简单起见,我在上面只使用了 4 个)并且维护这是一个 pita
执行以下操作。
var birthday : NSDate? = nil
if let birthdayString = row[Person.birthday] {
birthday = NSDate.fromDatatypeValue(birthdayString)
}