【问题标题】:NSDate variable as nilNSDate 变量为 nil
【发布时间】:2015-08-12 20:45:00
【问题描述】:

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,将失败。 (我必须解开行[生日]!正如预期的非可选字符串,这可能/不能更改)

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

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

以及在init函数中使用生日。

但 swift 告诉我:无法将“nil”类型的值分配给“NSDate”的值

如何解决?

PS。 :我知道我可以有一个 if 和 2 个初始化器,但我宁愿没有,因为我的 Person init func 有 12 个参数(为简单起见,我只使用了上面的 4 个)并且维护这是一个皮塔

【问题讨论】:

    标签: swift sqlite nsdate


    【解决方案1】:

    执行以下操作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多