NSDate扩展比较两个NSDates是抛出警告

时间:2017-05-17 09:28:03

标签: ios swift

我的核心数据实体具有NSDate类的属性,如

@NSManaged public var journalDateTime: NSDate?

我想通过NSDate比较和排序我的记录与NSDate扩展的比较功能

open func compare(_ other: Date) -> ComparisonResult

我将代码编写为

if modificateionDate.compare(latestJournal?.journalDateTime! as! Date) == ComparisonResult.orderedDescending {
     beerObject?.beerIndex?.modificationDate = latestJournal?.journalDateTime as NSDate?
}

哪个显示我的警告,如附图,我已通过日期和NSDate类发出此警告但未找到任何解决方案。enter image description here

如果您有任何针对此警告的单行解决方案,请与我们联系。现在,我只是忽略了这个警告。

感谢。

2 个答案:

答案 0 :(得分:0)

警告实际上毫无意义,至少是现在(当前swift,ios,Xcode版本),但为了安全起见,首先尝试将模型更改为使用Date而不是NSDate,这样你就不会甚至必须施放物体,不会有任何警告。 以下是Apple对此主题的评论:

  

Swift覆盖到Foundation框架提供了Date结构,它结合了NSDate类。 Date值类型提供与NSDate引用类型相同的功能,并且这两者可以在与Objective-C API交互的Swift代码中互换使用。此行为类似于Swift如何将标准字符串,数字和集合类型桥接到相应的Foundation类。

答案 1 :(得分:0)

警告基本上是说你可以用更简洁的方式做同样的事情,基本上首先解开你的可选项,然后用as在这两种类型之间架起桥梁。

进行比较的更安全的方法是:

if let journalDateTime = latestJournal?.journalDateTime as? Date {
    if modificateionDate > journalDateTime {
        // your code
    }
}

如果您必须使用自定义compare方法,请使用以下代码:

if let journalDateTime = latestJournal?.journalDateTime as? Date {
    if modificateionDate.compare(journalDateTime) == ComparisonResult.orderedDescending {
        beerObject?.beerIndex?.modificationDate = journalDateTime as NSDate
    }
}

P.S。你可以在Swift中使用Date的比较运算符。