调用中的无关参数标签“完成”,swift 2

时间:2015-11-16 14:28:21

标签: ios swift2

我有一个函数,即在完成后返回一些数组。该函数如下所示:

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/ 但是我无法理解这段代码有什么问题?

另外,当我删除完成标签时,我得到了这个: enter image description here

2 个答案:

答案 0 :(得分:1)

您不能使用data参数标签,因为您的参数标签未命名为data,但名为eventArrayCalendarController.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
    ....
}

问题是我尝试将方法应用于类,而不是类的类型的变量。我不知道为什么,但它只是这样。