我正在尝试对这个问题的可接受答案中列出的数组进行排序,但是遇到了Isuru在对该答案的评论中提到的问题。即,应按实体的“date”属性对数组进行排序的代码使编译器投诉“找不到成员’date’”
这是描述实体的NSManagedObject子类:
import Foundation
import CoreData
@objc(Entry)
class Entry: NSManagedObject {
@NSManaged var date: NSDate
@NSManaged var reflections: AnyObject
@NSManaged var contactComment: NSSet
@NSManaged var person: NSSet
override func awakeFromInsert() {
let now:NSDate = NSDate()
self.date = now;
}
}
这是尝试对数组进行排序的代码:
lazy var entries:[Entry] = {
var days:[Entry] = self.managedObjectContext!.requestEntity("Entry")as [Entry]
days.sort({$0.date < $1.date})
var today:Entry = days.last!
println(today.date)
return days
}()
请注意,在该代码的后半部分,我能够访问和记录其中一个条目的“ date”属性,并且编译器对此没有任何问题。
我的排序语法正确吗?我没有看到此代码还有其他问题吗?
Swift编译器在某种程度上没有提供有用的错误,这是一个问题。真正的问题是NSDate
不能直接比较<
。相反,您可以使用NSDate
的compare
方法,如下所示:
days.sort({ $0.date.compare($1.date) == NSComparisonResult.OrderedAscending })
另外,您也可以扩展NSDate
来实现Comparable
协议,以便它可以与之比较<
(与<=
,>
,>=
,==
):
public func <(a: NSDate, b: NSDate) -> Bool {
return a.compare(b) == NSComparisonResult.OrderedAscending
}
public func ==(a: NSDate, b: NSDate) -> Bool {
return a.compare(b) == NSComparisonResult.OrderedSame
}
extension NSDate: Comparable { }
注意: 您只需要实现<
与==
上面显示,然后休息运营商<=
,>
等会通过标准库提供。
有了它,您原来的排序功能应该可以正常工作:
days.sort({ $0.date < $1.date })