Subclase UIApplication con Swift

En Objective C fue simple: fue suficiente para actualizar el archivo main.m y cambiar los parámetros de UIApplicationMain ()

return UIApplicationMain(argc, argv, NSStringFromClass([CustomUIApplication class]), NSStringFromClass([AppDelegate class])); 

Pero en breve no hay archivo main.m, ya que la guía dice

“El código escrito en el scope global se utiliza como punto de entrada para el progtwig, por lo que no necesita una función principal”.

Entonces, ¿cómo subclase UIApplication en swift? ¿Cualquier sugerencia?

Ok, he encontrado la solución Primero, me he dado cuenta de que, en la parte superior del archivo AppDelegate.swift, hay esta línea

 @UIApplicationMain 

Como esta línea está fuera de cualquier ámbito (está a nivel de archivo), se ejecuta inmediatamente, y supongo que el comstackdor la traducirá en una función principal estándar.

Entonces, hice esto, comenzando con una nueva aplicación Swift-Only:

  • comentado @UIApplicationMain
  • se agregó un archivo main.swift como este (FLApplication es mi subclase).
    ¡IMPORTANTE el archivo DEBE SER NOMBRADO main.swift, ya que los enunciados 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:

Las expresiones no están permitidas en el nivel superior

Este es el archivo main.swift ( NOTA: la syntax se ha actualizado para XCode 8 Beta 6 – créditos a la respuesta de Matt aquí , si está buscando la syntax anterior, mire la sección de edición)

 import Foundation import UIKit UIApplicationMain( CommandLine.argc, UnsafeMutableRawPointer(CommandLine.unsafeArgv) .bindMemory( to: UnsafeMutablePointer.self, capacity: Int(CommandLine.argc)), NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self) ) 

EDICION – dec 2016
La syntax pre-XCode 8 beta 6 era

 import Foundation import UIKit UIApplicationMain(C_ARGC, C_ARGV, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate)) 

A continuación, cree un archivo rápido para la subclase UIApplication, FLApplication.swift, con este código:

 import UIKit import Foundation class FLApplication: UIApplication { override func sendEvent(event: UIEvent!) { super.sendEvent(event) println("send event") // this is an example // ... dispatch the message... } } 

ahora, UIApplication está subclasificada correctamente y verá los mensajes de “enviar evento” en el registro

EDICIONES ANTIGUAS
Como referencia, dado que esto ha cambiado mucho de la versión 1 a la 3, dejo aquí todas las ediciones anteriores

EDITAR

Como comentó Hu Junfeng ahora, las explicaciones sobre UIApplicationMain y el archivo main.swift están documentadas en la sección de Atributos de The Swift Language Reference: Enlace

EDITAR – MARZO 2015

Como comentó Thomas Verbeek En el XCode 6.3 Beta, puede encontrar que C_ARGC y C_ARGV han sido renombrados a Process.argc y Process.unsafeArgv respectivamente. Su llamada UIApplicationMain en el archivo main.swift necesitará una actualización para:

 UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate)) 

Una alternativa es extender la aplicación UIApplication lugar de subclasificarla. Según el iBook lanzado por Apple, las extensiones en Swift pueden:

Agregar propiedades calculadas y propiedades estáticas calculadas Definir métodos de instancia y métodos de tipo Proporcionar nuevos inicializadores Definir subíndices Definir y usar nuevos tipos nesteds Convertir un tipo existente en un protocolo

Extracto de: Apple Inc. “El lenguaje de progtwigción Swift.

Si sus necesidades en la subclase UIApplication son satisfechas por esas capacidades, una extensión podría ser el camino a seguir.