NOTE la syntaxe a été mis à jour pour Xcode 10.1 et Swift 5 en juin 2019 (crédits à la réponse de mat ici && réponse de Tung Fam ici ), si vous recherchez les syntaxes précédentes regardez la section d'édition.
Ok, j'ai trouvé la solution
Tout d'abord, j'ai remarqué qu'en haut du fichier AppDelegate.swift, il y a cette ligne
@UIApplicationMain
Puisque cette ligne est en dehors de toute portée (elle est au niveau du fichier), elle est exécutée immédiatement, et je suppose que le compilateur la traduit en une fonction principale standard.
Donc, j'ai fait cela, à partir d'une nouvelle application Swift-Only:
- commenté
@UIApplicationMain
- ajouté un fichier main.swift comme celui-ci (FLApplication est ma sous-classe).
IMPORTANT, le fichier DOIT ÊTRE NOMMÉ main.swift, car les instructions de niveau supérieur ne sont pas prises en charge sur les autres fichiers! Vous ne pouvez pas ajouter l'appel UIApplicationMain () dans un autre fichier, sinon vous recevrez cette erreur:
Les expressions ne sont pas autorisées au niveau supérieur
Ceci est le fichier main.swift
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv,
NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self)
)
Ensuite, créez un fichier swift pour la sous-classe UIApplication, FLApplication.swift, avec ce code:
import UIKit
import Foundation
class FLApplication: UIApplication {
override func sendEvent(_ event: UIEvent) {
super.sendEvent(event)
print("send event")
}
}
maintenant, UIApplication est correctement sous-classée et vous verrez les messages "envoyer l'événement" dans le journal
ANCIENNES MODIFICATIONS
Pour référence, puisque cela a beaucoup changé de la version 1 à la version 3, je laisse ici toutes les modifications précédentes
EDIT - MARS 2015
Comme l'a commenté Hu Junfeng maintenant, les explications sur UIApplicationMain
et le fichier main.swift sont documentées dans la section Attributs de The Swift Language Reference: Link
Comme l'a commenté Thomas Verbeek Dans la version bêta de XCode 6.3, vous constaterez peut-être que C_ARGC et C_ARGV ont été renommés respectivement Process.argc et Process.unsafeArgv. Votre appel UIApplicationMain dans le fichier main.swift devra être mis à jour pour:
UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
La syntaxe pré-XCode 8 était
import Foundation
import UIKit
UIApplicationMain(C_ARGC, C_ARGV, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
EDIT - DÉC 2016
Solution pour Xcode 8, avant la bêta 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()
paramètres, plutôt que d'ajouter le nom de la classe ci-dessousNSPrincipalClass
dans le fichier app-info.plist?