![](/img/trans.png)
[英]iterate through two custom arrays and set values if variables are equal Swift
[英]Iterate through a custom Parse column in Swift app
我想知道如何存储整个自定义列(来自自定义类的用户Pointer<_User>
列)并将它们全部放在数组变量中,以便我可以查看该类中是否存在该用户。 这就是我所拥有的:
旧代码
var objectUserIdArray = [String]()
let objectUserIdQuery : PFQuery = PFQuery(className: "Scores")
objectUserIdQuery.findObjectsInBackgroundWithBlock {
(objects : [PFObject]? , error : NSError?) -> Void in
var objectID = objects! as [PFObject]
for i in 0..<objectID.count {
objectUserIdArray.append(objectID[i].objectId!)
}
for _ in objectID {
print(objectUserIdArray)
}
新规范
func saveScoresOnParse() {
objectUserIdQuery.whereKey("User", equalTo: PFObject(withoutDataWithClassName: "_User", objectId: userID))
objectUserIdQuery.findObjectsInBackgroundWithBlock {
(objects : [PFObject]? , error : NSError?) -> Void in
if error == nil {
//var objectID = objects! as [PFObject]
/*for i in 0..<objectID.count {
self.objectUserIdArray.append( objectID[i].objectId! )
}*/
for _ in objects! {
print(objects)
}
// The score key has been incremented
for (var i = 0 ; i < self.objectUserIdArray.count ; i++) {
if self.userID != objects![i] {
print("New Scores")
print("R: \(self.rightAnswers)")
print("W: \(self.wrongAnswers)")
print("S: \(self.skippedQuestions)")
self.scores["User"] = PFUser.currentUser()
self.scores["Right"] = self.rightAnswers
self.scores["Wrong"] = self.wrongAnswers
self.scores["Skipped"] = self.skippedQuestions
self.scores.saveInBackground()
} else if self.userID == objects![i] {
print("Updated Scores")
self.scores.incrementKey("Right", byAmount: 1)
self.scores.incrementKey("Wrong", byAmount: 1)
self.scores.incrementKey("Skipped", byAmount: 1)
print("R: \(self.rightAnswers)")
print("W: \(self.wrongAnswers)")
print("S: \(self.skippedQuestions)")
self.scores.saveInBackgroundWithBlock {
(success: Bool, error: NSError?) -> Void in
if (success) {
// The score key has been incremented
} else {
// There was a problem, check error.description
}
}
} else {
print("Error")
}
}
} else {
print(error)
}
}
但它只存储objectId
列而不存储Pointer<_User>
列。 我知道这一点,因为当我打印内部的东西时,它会打印出objectIds。
这就是发生的事情,而不仅仅是更新当前用户的分数,它只会创建新的分数。 我希望if语句检查用户是否已经存在于该列中,如果它确实更新了分数,如果没有,则创建新的分数。 (新代码的if语句不起作用,我必须把它拿出来保存...)
您更新的问题可以更清楚地了解您实际想要做的事情;
在Parse Score对象中保存或更新用户的分数。 要做到这一点,没有理由检索任何对象ID或循环任何结果。 在使用Parse时,通常不会明确地使用Object Ids; 你可以简单地传递对象本身,Parse会为你编制引用。
我不确定你是怎么想改变分数的; 在上面的代码中,您在一个案例中增加但在另一个案例中明确地设置分数,但下面的代码显示了一般方法。
如果您经常或反复更新分数记录,那么您可以通过在第一次找到它后在属性中保留对Scores对象的引用来简化代码,然后只需更新并保存它。
func saveScoresOnParse() {
if let currentUser=PFUser.currentUser() {
let scoreQuery= PFQuery(className: "Scores")
scoreQuery.whereKey("User",equalTo:currentUser)
scoreQuery.getFirstObjectInBackgroundWithBlock {
(object : PFObject? , error : NSError?) -> Void in
if error == nil {
var scoreObject=object ?? PFObject.objectWithClassName("Scores")
if (scoreObject["User"]==nil) {
scoreObject["User"]=currentUser
}
scoreObject["Right"]=self.rightAnswers
scoreObject.saveInBackground()
} else {
print(error)
}
}
} else {
print("No current user!")
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.