如何根据创建日期订购PFObject?

时间:2017-08-18 17:36:41

标签: arrays swift

我有一些用户评论存储在数据库(parse-server)中,我想在viewController viewDidLoad()上显示。我可以轻松地拉出评论对象,如下所示:         super.viewDidLoad()

    func query(){
        let commentsQuery = PFQuery(className: "Comments")
        commentsQuery.whereKey("objectId", equalTo: detailDisclosureKey)
        commentsQuery.findObjectsInBackground { (objectss, error) in
            if let objects = objectss{
                if objects.count == 1{
                    for object in objects{
                        self.unOrderedComments.append(object)
                    }
                }
            }
        }

    }

此查询转储unOrederedComments数组中的所有注释。每个注释都会添加到数据库中,并自动添加createdAt属性,该属性与其创建的确切时间相关。此属性是一个字符串,其中包含(作为示例)形式:" 2017-08-13T19:31:47.776Z" (最后的Z是在每个字符串的末尾...不完全确定为什么它在那里,但它的常数)。现在,每个新注释都被添加到数据库的顶部,因此任何查询结果应该无论如何都是有序的。但是,如果有必要,我想通过重新排序来确保确定。我的一般思维过程是使用.sorted,但我无法弄清楚如何将此应用于我的情况

func orderComments(unOrderComments: [PFObject]) -> [PFObject]{
    let orderedEventComments = unOrderedEventComments.sorted(by: { (<#PFObject#>, <#PFObject#>) -> Bool in
            //code
        })
}

这是通用设置,但我不能,尽管在网上查找了几个例子,想出要放在&lt;#PFObject#&gt;&#39;和//code中的内容。我想根据&#34; createdAt&#34;来订购它们。属性,但这不是通过点表示法实现的,而是需要PFObject [&#34; createdAt&#34;]并使用此表示法会导致错误。虽然我可能需要设置一个自定义谓词但我不知道如何做到这一点,我觉得如此。

1 个答案:

答案 0 :(得分:2)

我遇到了同样的情况,我做的是先用我下载的数据创建一个结构数组,然后将字符串createdAt转换为Date,然后使用此函数:

dataArrayOrdered = unOrderedArray.sorted(by: { $0.date.compare($1.date) == .orderedAscending})

(。date是我的strcuts数组中存储的日期)

尝试此代码,请注意我假设您在Parse数据库中有一个名为[“Comments”]的变量名称,因此必要时替换。此外,我意识到createdAt它是日期格式,所以没有必要将它从字符串更改为日期,如果它对你的工作原理相同,如果它没有引用它:{{3} }。

    struct Comment {
        var date = Date()
        var comment = String()
    }

    var unOrderedComments: [Comment] = []
    var orderedComments = [Comment]()


    override func viewDidLoad() {
    super.viewDidLoad()

        query()
  }


    func query(){
        let commentsQuery = PFQuery(className: "Comments")
        commentsQuery.findObjectsInBackground { (objectss, error) in

            if let objects = objectss{
                if objects.count >= 1{
                    for object in objects{
                        let newElement = Comment(date: object.createdAt!, comment: object["Comments"] as! String)
                        self.unOrderedComments.append(newElement)
                        print(self.unOrderedComments)
                    }
                }
                self.orderedComments = self.unOrderedComments.sorted(by: { $0.date.compare($1.date) == .orderedAscending})
                print(self.orderedComments)
            }
        }
    }