PFObject 数组排序

PFObject Array Sort

我正在使用 Parse,我有一个名为 "scorecardData" 的 PFObject 数组。每个 PFObject 都有一个 Int 类型的 "score" 属性。我正在尝试按 "score" 对我的数组进行排序,但出现以下错误:"Binary operator '<' cannot be applied to two 'AnyObject?' operands"。我不确定我在这里做错了什么。我还尝试将 objectForKey("score") 转换为! Int 但它不允许我这样做。有什么建议么?提前致谢。

    var scorecardData = [PFObject]()

    scorecardData.sortInPlace({[=10=].objectForKey("score") < .objectForKey("score")})

您将 scorecardData 变量声明为 PFObject 的数组。您为什么尝试使用 objectForKey: 保留访问 PFObject 属性?无论如何,我不是解析专家。但是,如果您将数组声明为 [PFObject],则可以使用:

scorecardData.sortInPlace({[=10=].score < .score})

但这不会起作用,除非您将 PFObject 子class 用于更原生的面向对象的 class 结构。如果这样做,请记住还要指定:

var scorecardData = [YOUR_NEW_CLASS]()

我强烈建议子classing PFObject 以利用所有 swift 类型安全的好东西。

但是如果你想保留你的数据结构,你可以使用:

scorecardData.sortInPlace({([=12=]["score"] as! Int) < (["score"] as! Int)})

请记住这很危险,并在以后避免它。

你试过这样做吗?

var query = PFQuery(className:"ScoreCard")

    // Sorts the results in ascending order by the score field
query.orderByDescending("score")

query.findObjectsInBackgroundWithBlock {

如果你想对你的项目数组进行排序...你可以这样做

extension Array where Element:PFObject {
    func sort() -> [PFObject] {
        return sort { (first, second) -> Bool in
            let firstDate   = first.objectForKey("time") as! NSDate//objectForKey(Constants.Parse.Fields.User.fullName) as? String
            let secondDate  = second.objectForKey("time") as! NSDate//objectForKey(Constants.Parse.Fields.User.fullName) as? String
            return firstDate.compare(secondDate) == .OrderedAscending
        }
    }
}