我的核心数据实体具有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类发出此警告但未找到任何解决方案。
如果您有任何针对此警告的单行解决方案,请与我们联系。现在,我只是忽略了这个警告。
感谢。
答案 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
的比较运算符。