Подтвердить что ты не робот

Application (_: didFinishLaunchingWithOptions:) 'почти соответствует необязательному требованию

После установки Xcode 8 beta 6 я получаю предупреждение:

Приложение метода экземпляра (_: didFinishLaunchingWithOptions:) "почти соответствует необязательному требованию" (_: didFinishLaunchingWithOptions:) "протокола" UIApplicationDelegate "

в моем делете приложения.

Есть две предложенные исправления, чтобы отключить предупреждение:

  • Отметьте метод как закрытый
  • Добавить метод @nonobjc в метод

Выполнение или отменяет предупреждение. Но зачем это нужно делать?

4b9b3361

Ответ 1

Это предупреждение связано с тем, что параметр didFinishLaunchingWithOptions: метода делегата application(_:didFinishLaunchingWithOptions:) теперь подключен к Swift как [UIApplicationLaunchOptionsKey: Any]?, а не a [NSObject : AnyObject]?.

Поэтому вам нужно будет обновить свою реализацию, чтобы отразить это изменение:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // ...
}

Обратите внимание: ни одна из предложенных исправлений Xcode не решит проблему, они будут скрывать вашу реализацию application(_:didFinishLaunchingWithOptions:) от Objective-C - это значит, что она никогда не будет вызвана.

Ответ 2

первый параметр, переданный в функцию, больше не имеет внешнего имени. Это действительно незначительная деталь, так как вы не вызываете этот метод напрямую, а его быстрое решение сделать компилятор счастливым. Вы можете вручную изменить это имя первого параметра на _ или просто позволить Xcode обрабатывать это для вас.

func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool  

или новый синтаксис

func application(_ application:UIApplication, 
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool // or remove = nil and try

вы можете получить последнюю документацию из apple и пробовать ссылку в здесь