我正在尝试对这个问题的可接受答案中列出的数组进行排序,但是遇到了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方法,如下所示:
NSDate
<
compare
days.sort({ $0.date.compare($1.date) == NSComparisonResult.OrderedAscending })
另外,您也可以扩展NSDate来实现Comparable协议,以便它可以与之比较<(与<=,>,>=,==):
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 })