我正在尝试对这个问题的可接受答案中列出的数组进行排序,但是遇到了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 })
假设我有一个由几个对象组成的数组: 我如何按日期元素对这个数组进行排序,从最接近当前日期的日期开始,然后按时间向下排序?请记住,数组可能有许多对象,但为了简单起见,我使用了2。 我会使用排序函数和自定义比较器吗?
问题内容: 假设我有一些对象的数组: 如何从最接近当前日期和时间的日期开始按date元素对该数组进行排序?请记住,数组可能有许多对象,但是为了简单起见,我使用了2。 我会使用排序功能和自定义比较器吗? 更新: 在我的特定情况下,我希望将日期从最近到最早安排。最后,我不得不逆转简单函数的逻辑: 这会将最新日期排序。 问题答案: 最简单的答案 更通用的答案 或更简洁: 通用,有力的答案 在所有数组上使
问题内容: 在Swift 2.0中,您将如何按属性对自定义对象数组进行排序?我知道在Swift 1.2中,这是使用sorted()和sort()完成的。但是,这些方法在Xcode 7 beta 4中不再起作用。谢谢! 例如: 问题答案: 在Swift 2中: 您可以使用方法,使用来比较两个日期: 或者,如果您想对原始数组进行排序,则可以: 在Swift 3中 返回数组的排序形式,请使用,而不是 排
假设我们有一个名为的自定义类,该类包含两个属性: 其中许多存储在一个阵列中: 如何按“fileID”升序或降序对图像数组进行排序?
问题内容: 我有一个数组,如: 谁能建议一种基于datetime元素对此进行排序/排序的方法? 问题答案: 使用和自定义比较功能: 编辑 :您的数据组织在一个数组的数组中。为了更好地区分这些数据,我们将其称为内部数组(数据)记录,以便您的数据实际上是一个记录数组。 会一次将其中两个记录传递给给定的比较函数。 然后将每个记录的字段提取为UNIX时间戳(整数),并返回差值,以便结果将是两个日期相等,如
问题内容: 我已经使用AJAX获得了以下对象并将它们存储在数组中: 如何仅使用JavaScript 创建一个函数以按属性 升序 或 降序 对对象进行排序? 问题答案: 按价格升序对房屋进行排序: 或在ES6版本之后: