我正在尝试解析使用Haneke Swift缓存的一些数据。我缓存了数据并编写了解析器来完成这一任务。此解析器位于一个名为AssembleCalendar()的单独类中。
使用Haneke的示例代码进行抓取,我尝试完全失败地从闭包返回一个值。
我的尝试
func getScheduledItems() -> [ScheduledItem] {
var scheduledItem = [ScheduledItem]() // initialize array
let cache = Shared.dataCache
cache.fetch(key: "CalendarData").onSuccess { data in
scheduledItem = AssembleCalendar().assimilate(data) // update array
print(scheduledItem) // array returns expected value
}
print(scheduledItem) // array returns nil
return scheduledItem // returns nil
}我所知道的
我知道这是一个异步的问题。我的代码没有等待我的AssembleCalendar()解析器完成。它只是运行每一行,并在我的scheduledItem接收值之前很久就返回0。我尝试了很多很多解决方案,并在网上阅读了不少示例,但在这个场景中,我想不出如何从这个闭包中检索值。
我的问题
如何让.fetch()在函数点击零之前返回一个值?
更新:
以下是我的上下文代码:
class Schedule {
var items : [ScheduledItem]
init() {
items = getScheduledItems() // Schedule.getScheduledItems()
}
func getScheduledItems(completion: (items: [ScheduledItem]) -> ()) {
var scheduledItem = [ScheduledItem]() // initialize array
let cache = Shared.dataCache
cache.fetch(key: "CalendarData").onSuccess { data in
scheduledItem = AssembleCalendar().assimilate(data) // update array
print(scheduledItem) // array returns expected value
completion(items: scheduledItem)
}
}
}发布于 2015-09-10 20:16:55
Fetch()使用的是一个完成处理程序,这意味着这里调用的代码块实际上是在执行返回语句之后执行的。这就是为什么它要返回零。为了解决这个问题,您可以使用自己的完成处理程序返回以下信息:
class Schedule {
var items = [ScheduledItem]()
init(items: [ScheduledItem]) {
self.items = items
}
class func getScheduledItems(completion: (items: [ScheduledItem]) -> ()) {
var scheduledItem = [ScheduledItem]() // initialize array
let cache = Shared.dataCache
cache.fetch(key: "CalendarData").onSuccess { data in
scheduledItem = AssembleCalendar().assimilate(data) // update array
print(scheduledItem) // array returns expected value
completion(items: scheduledItem)
}
}
}然后使用以下方法初始化类:
Schedule.getScheduledItems { (items) -> () in
var schedule = Schedule(items: items)
}https://stackoverflow.com/questions/32509392
复制相似问题