当前位置: 首页 > 面试题库 >

如何按属性值(日期)对包含NSManagedObject子类实例的swift数组进行排序

李跃
2023-03-14
问题内容

我正在尝试对这个问题的可接受答案中列出的数组进行排序,但是遇到了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不能直接比较<。相反,您可以使用NSDatecompare方法,如下所示:

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版本之后: