Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 从闭包中的函数返回_Xcode_Multithreading_Swift_Return_Closures - Fatal编程技术网

Xcode 从闭包中的函数返回

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

我需要在Swift中获取某一天的一系列事件。因为
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
的块中,它试图从闭包返回,但我想从函数返回。我该怎么做