Xcode 从闭包中的函数返回
我需要在Swift中获取某一天的一系列事件。因为Xcode 从闭包中的函数返回,xcode,multithreading,swift,return,closures,Xcode,Multithreading,Swift,Return,Closures,我需要在Swift中获取某一天的一系列事件。因为EKEventStore.requestAccessToEntityType是异步运行的,所以我使用dispatch\u group\u notify等待EKEventStore.requestAccessToEntityType的完成处理程序完成,以便我可以对其执行一些操作,然后返回它。但是我无法从传递给dispatch\u group\u notify的闭包内的函数返回,因为它尝试从闭包返回,而不是从函数返回。这是我的密码 class
EKEventStore.requestAccessToEntityType
是异步运行的,所以我使用dispatch\u group\u notify
等待EKEventStore.requestAccessToEntityType
的完成处理程序完成,以便我可以对其执行一些操作,然后返回它。但是我无法从传递给dispatch\u group\u notify
的闭包内的函数返回,因为它尝试从闭包返回,而不是从函数返回。这是我的密码
class func eventsOn(date: NSDate) -> [Event] {
var events = [Event]()
var ekEvents = [EKEvent]()
var dispatch_group = dispatch_group_create()
dispatch_group_enter(dispatch_group)
Event.eventStore.requestAccessToEntityType(EKEntityTypeEvent, completion: {
gotAccess, error in
let cal = NSCalendar.currentCalendar()
var comps = cal.components(.CalendarUnitYear | .CalendarUnitMonth | .CalendarUnitDay, fromDate: date)
let aFewHoursAgo = NSDateComponents()
aFewHoursAgo.hour = -5
var daStartDate = cal.dateFromComponents(comps)!
daStartDate = cal.dateByAddingComponents(aFewHoursAgo, toDate: daStartDate, options: .allZeros)!
var aDay = NSDateComponents()
aDay.day = 1
var daEndDate = cal.dateByAddingComponents(aDay, toDate: daStartDate, options: .allZeros)!
daEndDate = daEndDate.dateByAddingTimeInterval(-1)!
let p = Event.eventStore.predicateForEventsWithStartDate(daStartDate, endDate: daEndDate, calendars: [Event.eventStore.defaultCalendarForNewEvents])
let tmp = Event.eventStore.eventsMatchingPredicate(p) as [EKEvent]?
if let _ = tmp {
ekEvents = tmp!
}
dispatch_group_leave(dispatch_group)
})
let queue = dispatch_get_global_queue(Int(QOS_CLASS_USER_INITIATED.value), 0)
dispatch_group_notify(dispatch_group, queue) {
println(ekEvents)
let ekEventId = Expression<String>("ekEventId")
let eventId = Expression<Int>("id")
for ekEvent in ekEvents {
let daEventId = Event.db["events"].filter(ekEventId == ekEvent.eventIdentifier).select(eventId).first![eventId]
events.append(Event.eventWithId(daEventId)!)
}
return events
}
}
class func eventsOn(日期:NSDate)->[事件]{
var events=[Event]()
变量ekEvents=[EKEvent]()
var dispatch\u group=dispatch\u group\u create()
调度组输入(调度组)
Event.eventStore.requestAccessToEntityType(eEntityTypeEvent,完成:{
获取访问权限时出错
设cal=NSCalendar.currentCalendar()
var comps=cal.components(.CalendarUnitYear |.CalendarUnitMonth |.CalendarUnitDay,fromDate:date)
设afewoursago=NSDateComponents()
afewoursago.hour=-5
var daStartDate=cal.dateFromComponents(组件)!
daStartDate=cal.dateByAddingComponents(AFEWoursago,toDate:daStartDate,选项:。全零)!
var aDay=NSDateComponents()
每天=1
var daEndDate=cal.dateByAddingComponents(aDay,toDate:daStartDate,选项:。allZeros)!
daEndDate=daEndDate.dateByAddingTimeInterval(-1)!
设p=Event.eventStore.predicateForEventsWithStartDate(daStartDate,endDate:daEndDate,日历:[Event.eventStore.defaultCalendarForNewEvents])
让tmp=Event.eventStore.eventsMatchingPredicate(p)作为[EKEvent]?
如果let=tmp{
ekEvents=tmp!
}
派遣组休假(派遣组)
})
let queue=dispatch\u get\u global\u queue(Int(QOS\u CLASS\u USER\u initialized.value),0)
调度组通知(调度组、队列){
println(ekEvents)
设ekEventId=表达式(“ekEventId”)
让eventId=表达式(“id”)
对于ekEvents中的ekEvent{
让daEventId=Event.db[“events”].filter(ekEventId==ekEvent.eventIdentifier)。选择(eventId)。首先![eventId]
events.append(Event.eventWithId(daEventId)!)
}
返回事件
}
}
因此,我将return events
放在我传递给dispatch\u group\u notify
的块中,它试图从闭包返回,但我想从函数返回。我该怎么做