ios swift swift3 xcode8-beta6

ios - La aplicación(_: didFinishLaunchingWithOptions:) ''casi coincide con el requisito opcional



swift swift3 (2)

el primer parámetro pasado a la función ya no tiene un nombre externo. Esto es solo un pequeño detalle ya que no llamas a este método directamente, y es una solución rápida para hacer feliz al compilador. Puede editar manualmente ese primer nombre de parámetro en _, o simplemente dejar que Xcode maneje esto por usted.

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

o la nueva sintaxis

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

puedes obtener la última documentación de apple y el enlace de muestra here

Después de instalar Xcode 8 beta 6, aparece una advertencia que dice:

La aplicación del método de instancia (_: didFinishLaunchingWithOptions :) ''casi coincide con la aplicación de requisito opcional'' (_: didFinishLaunchingWithOptions :) ''del protocolo'' UIApplicationDelegate ''

en mi delegado de la aplicación.

Hay 2 sugerencias sugeridas para silenciar la advertencia:

  1. Marque el método como privado
  2. Agregar @nonobjc al método

Hacer cualquiera silencia la advertencia. Pero, ¿por qué es necesario hacer esto?


Actualización de iOS 12 SDK

En iOS 12 SDK (que se incluye con Xcode 10), UIApplicationLaunchOptionsKey ahora se ha renombrado como el tipo anidado UIApplication.LaunchOptionsKey , por lo que querrás:

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

iOS 10 y 11 SDK (Xcode 8 y 9)

Esta advertencia se debe al hecho de que el parámetro application(_:didFinishLaunchingWithOptions:) método delegado application(_:didFinishLaunchingWithOptions:) ahora está puenteado a Swift como [UIApplicationLaunchOptionsKey: Any]? , en lugar de un [NSObject : AnyObject]? .

Por lo tanto, deberá actualizar su implementación para reflejar este cambio:

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

Tenga en cuenta que ninguno de los arreglos sugeridos por Xcode realmente solucionará el problema, solo ocultará su implementación de la application(_:didFinishLaunchingWithOptions:) de Objective-C, lo que significa que nunca se llamará.