NSDate变量为nil

时间:2015-08-12 20:45:01

标签: swift sqlite nsdate

Person类的init方法类似于

init (id:int64, firstName:String, lastName:String, birthDay:NSDate?)

你可以看到birthDay是可选的,因为我们永远不会有生日。

数据来自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,

将失败。 (我必须打开行[birthday]!因为需要一个非可选的字符串,这可能/不能更改)

所以我的想法是在创建人之前对此进行测试

 var birthday : NSDate
            if let birthdayString = row[Person.birthday] {
                birthday = NSDate.fromDatatypeValue(birthdayString)
            } else {
                birthday=nil
            }

并在init函数中使用birthday。

但斯威夫特告诉我:不能指定类型的值' nil'价值为'NSDate'

如何解决这个问题?

PS。 :我知道我可以有一个if和2个初始值设定项但是我没有因为我的Person init func有12个参数(为了简单起见我只使用了4个以上)并且保持这是一个皮塔饼< / p>

1 个答案:

答案 0 :(得分:7)

执行以下操作。

var birthday : NSDate? = nil
if let birthdayString = row[Person.birthday] {
    birthday = NSDate.fromDatatypeValue(birthdayString)
}