En Objective C era simple: era suficiente actualizar el archivo main.m y cambiar los parámetros UIApplicationMain ()
return UIApplicationMain(argc, argv, NSStringFromClass([CustomUIApplication class]), NSStringFromClass([AppDelegate class]));
Pero en swift no hay un archivo main.m, ya que la guía dice
"El código escrito en el ámbito global se utiliza como punto de entrada para el programa, por lo que no necesita una función principal".
Entonces, ¿cómo subclase UIApplication en swift? ¿Cualquier sugerencia?
ios
cocoa-touch
swift
LombaX
fuente
fuente
UIApplicationMain()
parámetros a agregar el nombre de la claseNSPrincipalClass
en la aplicación-info.plist?Respuestas:
Ok, encontré la solución
Primero, me di cuenta de que, en la parte superior del archivo AppDelegate.swift, hay esta línea
Dado que esta línea está fuera de cualquier alcance (está a nivel de archivo), se ejecuta de inmediato y supongo que el compilador la traduce en una función principal estándar.
Entonces, hice esto, comenzando desde una nueva aplicación Swift-Only:
@UIApplicationMain
IMPORTANTE el archivo DEBE SER NOMBRADO main.swift, ya que las declaraciones de nivel superior no son compatibles con otros archivos. No puede agregar la llamada UIApplicationMain () dentro de ningún otro archivo, de lo contrario, recibirá este error:
Este es el archivo main.swift
Luego, cree un archivo rápido para la subclase UIApplication, FLApplication.swift, con este código:
ahora, UIApplication se subclasifica correctamente y verá los mensajes "enviar evento" en el registro
EDITAR - MARZO 2015
Como comentó Hu Junfeng, ahora las explicaciones sobre
UIApplicationMain
el archivo main.swift están documentadas en la sección Atributos de The Swift Language Reference: EnlaceComo comentó Thomas Verbeek en XCode 6.3 Beta, puede encontrar que C_ARGC y C_ARGV han sido renombrados como Process.argc y Process.unsafeArgv respectivamente. Su llamada UIApplicationMain en el archivo main.swift deberá actualizarse a:
La sintaxis anterior a XCode 8 era
EDITAR - DIC 2016
Solución para Xcode 8, antes de beta 6
fuente
sendEvent:
hoy en día (recuerdo tener que hacerlo en iOS 3 ...)UIApplicationMain
yamain.swift
está documentado en la sección Atributos de The Swift Language Reference. developer.apple.com/library/ios/documentation/Swift/Conceptual/…C_ARGC
yC_ARGV
se le haya cambiado el nombre aProcess.argc
yProcess.unsafeArgv
respectivamente. Su llamada UIApplicationMain en el archivo main.swift deberá actualizarse aUIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(KBApplication), NSStringFromClass(AppDelegate))
Una alternativa es extenderlo en
UIApplication
lugar de subclasificarlo. Según el iBook lanzado por Apple, las extensiones en Swift pueden:Si sus necesidades en subclases
UIApplication
se satisfacen con esas capacidades, una extensión podría ser el camino a seguir.fuente
Crea una subclase de
UIApplication
y agrega tu lógicaCree un
main.swift
archivo que llame a laUIApplicationMain()
función global [Acerca de] , que es el nuevo punto de entrada de su aplicación a la que llama el sistema operativo. Esta función recibe el argumento de la función llamada, elUIApplication
nombre de laUIApplicationDelegate
clase , el nombre de la clase e inicia el ciclo de ejecución principal.Eliminar / comentar la
@UIApplicationMain
anotación por defectoAppDelegate
.@UIApplicationMain
generamain.swift
.Si no lo hace, obtendrá un error de compilación:
fuente