[英]Swift Completion Block
我要实现以下目标:
reloadDatabase()
。 reloadDatabase()
将在classA
调用getObjects()
以获取最新的数据库对象列表,并传递给objectList
中的objectList 问题:如何确保每当我在classB中调用getObjectList()
时,我总是得到最新的列表? 据我了解,我的objectList
可能不会在reloadDatabase() block
更新。 当reloadDatabase()
尚未到达完成块时,我可能正在调用getObjectList()
(objectList仍然是旧的objectList)。
我对闭包和块很陌生。 任何指导,不胜感激!
class classA: NSObject {
func addThisObject(object: RLMObject, completionBlock: () -> ())){
...
completionBlock()
}
func getObjects (completionBlock: ((list: [RLMObject]) -> ())){
var recordList = [RLMObject]()
...
completionBlock(list: recordList)
}
}
class classB: NSObject {
var objectList = [RLMObject]()
func addObject (object: RLMObject) {
classA().addThisObject(object, completionBlock: {() -> () in
self.reloadDatabase()
})
}
func reloadDatabase() {
classA().getObjects{(list) -> () in
self.objectList = list
}
}
func getObjectList() -> [RLMObject] {
return objectList
}
}
在您的问题中,您没有说是否要从不同的线程调用这些函数中的任何一个。 因此,当您在classB中调用addObject()时,直到重新加载数据库并更新objectList为止,执行什至不会继续。
使用闭包和块并不自动暗示代码将在不同的上下文中执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.