En Objective C c'était simple: il suffisait de mettre à jour le fichier main.m et de changer les paramètres UIApplicationMain ()
return UIApplicationMain(argc, argv, NSStringFromClass([CustomUIApplication class]), NSStringFromClass([AppDelegate class]));
Mais dans Swift, il n'y a pas de fichier main.m, puisque le guide dit
"Le code écrit à portée globale est utilisé comme point d'entrée pour le programme, vous n'avez donc pas besoin d'une fonction principale."
Alors, comment sous-classer UIApplication dans Swift ?? Toute suggestion?
ios
cocoa-touch
swift
LombaX
la source
la source
UIApplicationMain()
paramètres, plutôt que d'ajouter le nom de la classe ci-dessousNSPrincipalClass
dans le fichier app-info.plist?Réponses:
Ok, j'ai trouvé la solution
Tout d'abord, j'ai remarqué qu'en haut du fichier AppDelegate.swift, il y a cette ligne
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:
@UIApplicationMain
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:
Ceci est le fichier main.swift
Ensuite, créez un fichier swift pour la sous-classe UIApplication, FLApplication.swift, avec ce code:
maintenant, UIApplication est correctement sous-classée et vous verrez les messages "envoyer l'événement" dans le journal
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: LinkComme 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:
La syntaxe pré-XCode 8 était
EDIT - DÉC 2016
Solution pour Xcode 8, avant la bêta 6
la source
sendEvent:
nos jours (je me souviens avoir dû le faire dans iOS 3 ...)UIApplicationMain
etmain.swift
sont documentés dans la section Attributs de The Swift Language Reference. developer.apple.com/library/ios/documentation/Swift/Conceptual/…C_ARGC
etC_ARGV
avoir été renommé respectivement enProcess.argc
etProcess.unsafeArgv
. Votre appel UIApplicationMain dans le fichier main.swift devra être mis à jour versUIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(KBApplication), NSStringFromClass(AppDelegate))
Une alternative est de l'étendre
UIApplication
au lieu de le sous-classer. Selon l' iBook publié par Apple, les extensions dans Swift peuvent:Si vos besoins en sous
UIApplication
- classification sont satisfaits par ces capacités, une extension peut être la solution.la source
Créez une sous-classe de
UIApplication
et ajoutez votre logiqueCréez un
main.swift
fichier qui appelle laUIApplicationMain()
fonction globale [About] , qui est le nouveau point d'entrée de votre application qui est appelé par le système d'exploitation. Cette fonction reçoit l'argument de la fonction appelée, duUIApplication
nom de laUIApplicationDelegate
classe, du nom de la classe et démarre la boucle d'exécution principale.Supprimez / commentez l'
@UIApplicationMain
annotation par défautAppDelegate
.@UIApplicationMain
génèremain.swift
.Si vous ne le faites pas, vous obtiendrez une erreur de compilation:
la source