我有一个函数,即在完成后返回一些数组。该函数如下所示:
func fetchCalendarEvents (completion: (eventArray: [Meeting]) -> Void) -> Void {
let eventStore : EKEventStore = EKEventStore()
eventStore.requestAccessToEntityType(EKEntityType.Event, completion: {
granted, error in
if (granted) && (error == nil) {
print("access granted: \(granted)")
.......
completion (eventArray: arrayOfEvents)
}
}
else {
print("error: access not granted \(error)")
completion (eventArray: [])
}
})
}
当尝试像这样调用此函数时,我收到以下错误:
//error in this line: Extraneous argument label "completion" in call:
CalendarController.fetchCalendarEvents(completion:{(eventArray:[Meeting]) -> Void in
for meeting in eventArray {
print("Meeting: \(meeting.title)")
}
})
我试图绕着完成处理程序,我使用这个例子: http://alanduncan.me/2014/06/08/Swift-completion-blocks/ 但是我无法理解这段代码有什么问题?
答案 0 :(得分:1)
您不能使用data
参数标签,因为您的参数标签未命名为data
,但名为eventArray
。 CalendarController.fetchCalendarEvents
电话中也有错误。
修复后,您的代码应如下所示:
func fetchCalendarEvents (completion: (eventArray: [Meeting]) -> Void) -> Void {
let eventStore : EKEventStore = EKEventStore()
eventStore.requestAccessToEntityType(EKEntityType.Event, completion: { granted, error in
if granted {
print("access granted: \(granted)")
completion(eventArray: arrayOfEvents)
} else {
print("error: access not granted \(error)")
completion(eventArray: [])
}
})
}
和
let calController = CalendarController()
calController.fetchCalendarEvents { (eventArray) -> Void in
// ...
}
答案 1 :(得分:0)
好的,在@Eric D.的帮助下,正确的答案是:
let f = CalendarController()
f.fetchCalendarEvents{(eventArray) -> Void in
....
}
问题是我尝试将方法应用于类,而不是类的类型的变量。我不知道为什么,但它只是这样。