我是Swift 2.0编程的新手。我做了一个与Parse集成的应用程序。以下是我的代码片段
private func isIdNotFound() ->Bool{
var notFound = true
let query = PFQuery(className: "Customer")
query.whereKey("customerId", equalTo: self.id)
query.findObjectsInBackgroundWithBlock{
(objects : [PFObject]?, error: NSError?) -> Void in
if error == nil && objects != nil{
print(objects)
notFound = false
print(notFound)
}
}
print(notFound)
return notFound
}
控制台:
true
<Customer: 0x7feccbf07ef0, objectId: AiPH5pNgum, localId: (null)> {
customerId = wilson93;
email = 123;
password = 123;
}])
false
为什么打印true
然后只运行逻辑并打印false
。至于其他语言如Java,它应该打印两次错误。
答案 0 :(得分:2)
如评论中所述,您的代码为 你可以说,因为,如果大声读出,两个 请参阅documentation for 来自doc: 异步查找对象 并使用结果调用给定的块。 参数 IIRC,这意味着搜索是在另一个线程上运行的
如果我错了,@社区会纠正我。query.findObjectsInBackgroundWithBlock:
。在这里,Background
是关键字。因为您是异步搜索,因此不一定按照代码的顺序进行搜索,所以print(notFound)
的第二个实例在块中的实例之前执行。 / p>
print
语句就在彼此旁边(不包括大括号),但notFound
不会连续打印两次。 objects
在第一个(代码中的第二个实例)打印语句之后打印,但之前打印另一个。var notFound = true
query.findObjectsInBackgroundWithBlock{
(objects : [PFObject]?, error: NSError?) -> Void in
if error == nil && objects != nil{
print(objects) //this comes second
notFound = false
print(notFound) //then this comes last
}
}
print(notFound) //this runs first
PFQuery
here。它说, in italics ,搜索是异步执行的。
- (void)findObjectsInBackgroundWithBlock:(nullable PFQueryArrayResultBlock)block