2016-10-21 2 views
1

Я новичок в сегодняшнем расширении, у меня есть это предупреждение, кто-нибудь знает, как соответствовать необязательному требованию?Метод экземпляра 'widgetPerformUpdate (completeHandler :)' почти соответствует необязательному требованию 'widgetPerformUpdate (completeHandler :)'

метод экземпляра 'widgetPerformUpdate (completionHandler :) почти соответствует факультативное требование 'widgetPerformUpdate (completionHandler :)' протокола '' NCWidgetProviding

func widgetPerformUpdate(completionHandler: ((NCUpdateResult) -> Void)) { 
    // Perform any setup necessary in order to update the view. 
    // If an error is encountered, use NCUpdateResult.Failed 
    // If there's no update required, use NCUpdateResult.NoData 
    // If there's an update, use NCUpdateResult.NewData 

    let result = performFetch() 
    if result == .newData{ 
     tableView.reloadData() 
     self.preferredContentSize = tableView.contentSize 
    } 
    completionHandler(result) 
} 
+0

Попробуйте 'func widgetPerformUpdate (completeHandler: @escaping (NCUpdateResult) -> Void) {' – rmaddy

+0

@rmaddy, он работает! –

ответ

0

Запись @escaping до того типа параметра, чтобы указать, что закрытие разрешено.

func widgetPerformUpdate(completionHandler: (@escaping(NCUpdateResult) -> Void)) { 
    // Perform any setup necessary in order to update the view. 
    // If an error is encountered, use NCUpdateResult.Failed 
    // If there's no update required, use NCUpdateResult.NoData 
    // If there's an update, use NCUpdateResult.NewData 

    let result = performFetch() 
    if result == .newData{ 
     tableView.reloadData() 
     self.preferredContentSize = tableView.contentSize 
    } 
    completionHandler(result) 
} 

Эта функция в основном принимает аргумент замыкания как обработчик завершения. Функция возвращает после запуска операции, но закрытие не вызывается до завершения операции - закрытие должно уйти, чтобы быть вызванным позже.

Смежные вопросы