2016-09-15 2 views
3

Я реализуюUNUserNotificationCenterDelegate метод делегата «почти соответствует факультативное требование»

func userNotificationCenter(_ center: UNUserNotificationCenter, 
    didReceive response: UNNotificationResponse, 
    withCompletionHandler completionHandler:() -> Void) { 

Но я получаю «почти соответствует факультативное требование» предупреждение от компилятора. Что случилось с моей декларацией? Я скопировал его прямо из документации!

ответ

2

Это атрибут @escaping. Он не показан в документации. Но это - показано в заголовке. Это место для копирования! Вот правильное объявление:

func userNotificationCenter(_ center: UNUserNotificationCenter, 
    didReceive response: UNNotificationResponse, 
    withCompletionHandler completionHandler: @escaping() -> Void) { 
+0

скопирована с комментариями [здесь] (http://stackoverflow.com/questions/39395513/how-to-handle-usernotifications-actions-in-ios-10/39426419? noredirect = 1 # comment66238962_39426419): '@ escaping' означает« это закрытие может быть выполнено позже ». Компилятор может легко оптимизировать блокировки без экранирования, которые часто используются на карте, фильтре и т. Д., Swift 3 сделал это по умолчанию. Все обработчики завершения выполняются, когда какая-то задача завершается - позже, поэтому нам нужно аннотировать @escaping для всех обработчиков завершения в Swift 3 – Honey

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

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