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 claseNSPrincipalClassen 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:
@UIApplicationMainIMPORTANTE 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
UIApplicationMainel 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 ...)UIApplicationMainyamain.swiftestá documentado en la sección Atributos de The Swift Language Reference. developer.apple.com/library/ios/documentation/Swift/Conceptual/…C_ARGCyC_ARGVse le haya cambiado el nombre aProcess.argcyProcess.unsafeArgvrespectivamente. Su llamada UIApplicationMain en el archivo main.swift deberá actualizarse aUIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(KBApplication), NSStringFromClass(AppDelegate))Una alternativa es extenderlo en
UIApplicationlugar de subclasificarlo. Según el iBook lanzado por Apple, las extensiones en Swift pueden:Si sus necesidades en subclases
UIApplicationse satisfacen con esas capacidades, una extensión podría ser el camino a seguir.fuente
Crea una subclase de
UIApplicationy agrega tu lógicaCree un
main.swiftarchivo 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, elUIApplicationnombre de laUIApplicationDelegateclase , el nombre de la clase e inicia el ciclo de ejecución principal.Eliminar / comentar la
@UIApplicationMainanotación por defectoAppDelegate.@UIApplicationMaingeneramain.swift.Si no lo hace, obtendrá un error de compilación:
fuente