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