加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – NSDate变量为nil

发布时间:2020-12-14 04:35:25 所属栏目:百科 来源:网络整理
导读:Person类的init方法看起来像 init (id:int64,firstName:String,lastName:String,birthDay:NSDate?) 正如你所看到的,BirthDay是可选的,因为我们并不总是有生日. 数据来自SQLite数据库. SQLite中不存在日期类型,因此日期表示为字符串(可以为NULL).要将该字符串
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]!因为需要一个非可选的String,这可能/不能更改)

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

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

并在init函数中使用birthday.

但是swift告诉我:不能将’nil’类型的值赋给’NSDate’的值

怎么解决这个问题?

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

解决方法

请执行下列操作.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读