Sous-classe UIApplication avec Swift
En Objective-C, c'était simple: il suffisait de mettre à jour le principal.m fichier et modifier le UIApplicationMain() paramètres
return UIApplicationMain(argc, argv, NSStringFromClass([CustomUIApplication class]), NSStringFromClass([AppDelegate class]));
Mais dans swift n'est pas principal.m fichier, puisque le guide dit
“Le Code écrit à la portée globale est utilisée comme point d'entrée pour le programme, de sorte que vous n'avez pas besoin d'une fonction principale.”
Alors, comment la sous-classe UIApplication dans swift?? Toute suggestion?
- Pourquoi serait-il préférable de changer
UIApplicationMain()
de paramètres, afin d'ajouter le nom de la classe en vertu deNSPrincipalClass
dans la app-info.plist?
Vous devez vous connecter pour publier un commentaire.
Ok, j'ai trouvé la solution
Tout d'abord, j'ai remarqué que, en haut de l'AppDelegate.swift fichier, il y a cette ligne
Depuis cette ligne est en dehors de tout champ d'application (c'est au niveau du fichier), il est exécuté immédiatement, et je suppose que le compilateur de le traduire dans un standard de la fonction principale.
Donc, je l'ai fait, à partir d'une nouvelle Swift Seule application:
@UIApplicationMain
IMPORTANT le fichier DOIT ÊTRE NOMMÉ principal.swift, depuis, de haut niveau, les déclarations ne sont pas pris en charge sur d'autres fichiers! Vous ne pouvez pas ajouter le UIApplicationMain() appeler à l'intérieur de n'importe quel autre fichier, sinon, vous allez recevoir ce message d'erreur:
C'est le principal.swift fichier
Ensuite, créer rapidement un fichier pour le UIApplication sous-classe, FLApplication.swift, avec ce code:
maintenant, UIApplication est sous-classé correctement et vous verrez l'option "envoyer l'événement" les messages dans le journal
ÉDITION - MARS 2015
Comme commenté par Hu Junfeng maintenant les explications sur
UIApplicationMain
et le principal.swift fichier sont documentées dans la section Attributs de La Swift de Référence du Langage: LienComme commenté par Thomas Verbeek
Dans XCode 6.3 Bêta, vous trouverez peut-être que C_ARGC et C_ARGV ont été renommés Processus.argc et Processus.unsafeArgv respectivement. Votre UIApplicationMain appel à la main.swift dont a besoin le fichier de mise à jour à:
La pré-XCode 8 de la syntaxe a été
ÉDITION - DÉCEMBRE 2016
Solution pour Xcode 8, avant de beta 6
sendEvent:
de nos jours (je me souviens d'avoir à le faire dans iOS 3...)super.sendEvent(event)
...UIApplicationMain
etmain.swift
sont documentées dans la section Attributs de La Swift de la Langue de Référence. developer.apple.com/library/ios/documentation/Swift/Conceptual/...C_ARGC
etC_ARGV
ont été renommés pourProcess.argc
etProcess.unsafeArgv
respectivement. Votre UIApplicationMain appel à la main.swift dont a besoin le fichier de mise à jour deUIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(KBApplication), NSStringFromClass(AppDelegate))
main.swift
est expliqué dans les Fichiers d'Initialisation developer.apple.com/swift/blog/?id=7UIApplicationMain()
retourne unInt32
. Par conséquent, il ne devrait pas être enveloppé dans unexit()
appel, afin que le processus peut signaler son statut de sortie arrière de l'OS? Commeexit(UIApplicationMain(...))
exit()
. La documentation pourUIApplicationMain()
dit "la fonction ne retourne jamais. Lorsque les utilisateurs de quitter une application iOS ... l'application passe en arrière-plan." Par conséquent, il semble iOS est "l'habillage" le lancement de l'application iOS processus, et en ignorant ce que le code de sortie du processus aurait se terminer avec.CommandLine.argc
etCommandLine.unsafeArgv
Une alternative consiste à étendre
UIApplication
au lieu de sous-classement. Selon le iBook libéré par Apple, les extensions Swift peut:Si vos besoins en sous-classement
UIApplication
sont satisfaits par ces capacités, une Prolongation peut être le chemin à parcourir.