数组 – 如何通过属性值(日期)对包含NSManagedObject子类的实例
发布时间:2020-12-14 06:07:36 所属栏目:百科 来源:网络整理
导读:我试图排序一个数组的布局在 the accepted answer to this question,但我遇到的问题,Isuru提到的答案的评论。也就是说,应该通过实体的“date”属性对数组排序的代码使编译器投诉“无法找到成员”日期“ 这里是描述实体的NSManagedObject子类: import Fou
我试图排序一个数组的布局在
the accepted answer to this question,但我遇到的问题,Isuru提到的答案的评论。也就是说,应该通过实体的“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的比较方法,像这样:
days.sort({ $0.date.compare($1.date) == NSComparisonResult.OrderedAscending }) 或者,您可以扩展NSDate以实现可比较协议, (和< =,>,> =,==): 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 }) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |