NOTA: la sintaxis se ha actualizado para XCode 10.1 y Swift 5 en junio de 2019 (créditos a la respuesta de Matt aquí y la respuesta de Tung Fam aquí ), si está buscando las sintaxis anteriores, consulte la sección de edición.
Ok, encontré la solución
Primero, me di cuenta de que, en la parte superior del archivo AppDelegate.swift, hay esta línea
@UIApplicationMain
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:
- Comentado
@UIApplicationMain
- agregó un archivo main.swift como este (FLApplication es mi subclase).
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:
No se permiten expresiones en el nivel superior
Este es el archivo main.swift
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv,
NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self)
)
Luego, 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)
print("send event")
}
}
ahora, UIApplication se subclasifica correctamente y verá los mensajes "enviar evento" en el registro
EDICIONES ANTIGUAS
Como referencia, dado que esto ha cambiado mucho de la versión 1 a la versión 3, dejo aquí todas las ediciones anteriores
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: Enlace
Como 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:
UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
La sintaxis anterior a XCode 8 era
import Foundation
import UIKit
UIApplicationMain(C_ARGC, C_ARGV, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
EDITAR - DIC 2016
Solución para Xcode 8, antes de beta 6
import Foundation
import UIKit
UIApplicationMain(
CommandLine.argc,
UnsafeMutableRawPointer(CommandLine.unsafeArgv)
.bindMemory(
to: UnsafeMutablePointer<Int8>.self,
capacity: Int(CommandLine.argc)),
NSStringFromClass(FLApplication.self),
NSStringFromClass(AppDelegate.self)
)
UIApplicationMain()
parámetros a agregar el nombre de la claseNSPrincipalClass
en la aplicación-info.plist?