Application (_: didFinishLaunchingWithOptions:) 'почти соответствует необязательному требованию
После установки Xcode 8 beta 6 я получаю предупреждение:
Приложение метода экземпляра (_: didFinishLaunchingWithOptions:) "почти соответствует необязательному требованию" (_: didFinishLaunchingWithOptions:) "протокола" UIApplicationDelegate "
в моем делете приложения.
Есть две предложенные исправления, чтобы отключить предупреждение:
- Отметьте метод как закрытый
- Добавить метод @nonobjc в метод
Выполнение или отменяет предупреждение. Но зачем это нужно делать?
Ответы
Ответ 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 и пробовать ссылку в здесь