下面是我的函数,其中我突出显示了有效的代码(即异步),但我想要的是带有 PFQuery.countObjects(error: NSErrorPointer)
的同步代码去工作。
//Count how many violations User has.
func checkViolationStatus(usr: PFUser) -> Int32 {
var violations: Int32 = 0
var query = PFQuery(className: PF_BLOCKEDUSERS_CLASS_NAME)
query.includeKey(PF_BLOCKEDUSERS_USER)
query.whereKey(PF_BLOCKEDUSERS_USER, equalTo: usr)
//THIS WORKS BUT IS ASYNCHRONOUS AND I WANT IT TO BE SYNCHRONOUS
// query.countObjectsInBackgroundWithBlock {
// (count: Int32, error: NSError?) -> Void in
// if error == nil {
// print("Sean has played \(count) games")
// violations = count
// }
// }
//WANT TO MAKE IT SYNCHRONOUS -- THIS DOES NOT WORK
violations = query.countObjects(<#T##error: NSErrorPointer##NSErrorPointer#>)
return violations
}
这里如何正确使用query.countObjects(...)
?
最佳答案
下面是在 countObjects
中传递 NSError
的语法,以及如果您收到错误则打印错误的代码:
var error: NSError?
violations = query.countObjects(&error)
if error != nil {
print(error?.localizedDescription)
}
这里有一些解释可以帮助您进一步理解该错误类型。
NSErrorPointer
类型本质上与 Objective-C 中的 NSError**
相同,表示对象的地址,它实际所在的位置,而不仅仅是对象的地址指针,需要满足参数类型。这是 Objective-C 中常见的错误处理模式。
&
运算符允许您将这样的地址传递给函数。传入的参数可以修改,而不是仅限于函数的范围。这在 Swift 术语中称为输入输出参数,因为输入的内容也会输出。
关于ios - 从 Parse 使用 countObjects(同步)的语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33204354/