我正在尝试对数组进行排序,如下所示这个问题的公认答案,但我遇到了 Isuru 在该答案的评论中提到的问题。也就是说,应按实体的“日期”属性对数组进行排序的代码会导致编译器抱怨“找不到成员‘日期’”
这是描述实体的 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
}()
请注意,在该代码的后半部分,我能够访问并记录其中一个条目的“日期”属性,并且编译器对此没有问题。
我的排序语法正确吗?我没有看到这段代码还有其他问题吗?
这部分是因为 Swift 编译器没有给你一个有用的错误。真正的问题是NSDate
无法与<
直接地。相反,您可以使用NSDate
's compare
方法,像这样:
days.sort({ $0.date.compare($1.date) == NSComparisonResult.OrderedAscending })
或者,您可以扩展NSDate
实施Comparable
协议,以便可以将其与<
(and <=
, >
, >=
, ==
):
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 { }
Note:您只需要实施<
and ==
如上所示,然后是其余的运算符<=
, >
等将由标准库提供。
完成后,您原来的排序函数应该可以正常工作:
days.sort({ $0.date < $1.date })
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)