PFObject数组排序

时间:2015-11-22 20:00:32

标签: arrays swift parse-platform pfobject

我正在使用Parse,我有一个名为“scorecardData”的PFObject数组。每个PFObject都有一个Int类型的“score”属性。我正在尝试按“得分”对数组进行排序,但我收到以下错误:“二元运算符”<'不能应用于两个'AnyObject?'操作数”。我不确定我在这里做错了什么。我也尝试将objectForKey(“得分”)强制转换为! Int,但它不让我这样做。有什么建议?提前谢谢。

    var scorecardData = [PFObject]()

    scorecardData.sortInPlace({$0.objectForKey("score") < $1.objectForKey("score")})

3 个答案:

答案 0 :(得分:2)

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

scorecardData.sortInPlace({$0.score < $1.score})

但除非您将PFObject子类化为更本地的面向对象的类结构,否则这将无法工作。如果你这样做,还要记住:

var scorecardData = [YOUR_NEW_CLASS]()

我强烈建议继承PFObject以使用所有快速类型安全的东西。

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

scorecardData.sortInPlace({($0["score"] as! Int) < ($1["score"] as! Int)})

请记住,这是危险的,将来要避免它。

答案 1 :(得分:1)

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

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
        }
    }
}

答案 2 :(得分:0)

你试过这个吗?

var query = PFQuery(className:"ScoreCard")

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

query.findObjectsInBackgroundWithBlock {