Em Objective C era simples: bastava atualizar o arquivo main.m e alterar os parâmetros UIApplicationMain ()
return UIApplicationMain(argc, argv, NSStringFromClass([CustomUIApplication class]), NSStringFromClass([AppDelegate class]));
Mas no swift não há arquivo main.m, já que o guia diz
“O código escrito em escopo global é usado como ponto de entrada para o programa, então você não precisa de uma função principal.”
Então, como criar uma subclasse de UIApplication em swift ?? Alguma sugestão?
ios
cocoa-touch
swift
LombaX
fonte
fonte
UIApplicationMain()
parâmetros, em vez de adicionar o nome da classeNSPrincipalClass
em app-info.plist?Respostas:
Ok, eu encontrei a solução
Primeiro, notei que, no topo do arquivo AppDelegate.swift, há esta linha
Como essa linha está fora de qualquer escopo (está no nível do arquivo), ela é executada imediatamente e suponho que o compilador a traduza em uma função principal padrão.
Então, eu fiz isso, começando com um novo aplicativo apenas para Swift:
@UIApplicationMain
IMPORTANTE o arquivo DEVE SER NOMEADO main.swift, uma vez que as instruções de nível superior não são suportadas em outros arquivos! Você não pode adicionar a chamada UIApplicationMain () dentro de qualquer outro arquivo, caso contrário, receberá este erro:
Este é o arquivo main.swift
Em seguida, crie um arquivo swift para a subclasse UIApplication, FLApplication.swift, com este código:
agora, UIApplication tem uma subclasse correta e você verá as mensagens de "evento de envio" no log
EDITAR - MARÇO 2015
Conforme comentado por Hu Junfeng agora, as explicações sobre
UIApplicationMain
o arquivo main.swift estão documentadas na seção Atributos da Referência da Linguagem Swift: LinkConforme comentado por Thomas Verbeek No XCode 6.3 Beta, você pode descobrir que C_ARGC e C_ARGV foram renomeados para Process.argc e Process.unsafeArgv respectivamente. Sua chamada UIApplicationMain no arquivo main.swift precisará ser atualizada para:
A sintaxe pré-XCode 8 era
EDITAR - DEZ 2016
Solução para Xcode 8, antes do beta 6
fonte
sendEvent:
hoje em dia (lembro-me de ter que fazer isso no iOS 3 ...)UIApplicationMain
emain.swift
estão documentados na seção Atributos do The Swift Language Reference. developer.apple.com/library/ios/documentation/Swift/Conceptual/…C_ARGC
eC_ARGV
foi renomeado paraProcess.argc
eProcess.unsafeArgv
respectivamente. Sua chamada UIApplicationMain no arquivo main.swift precisará ser atualizada paraUIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(KBApplication), NSStringFromClass(AppDelegate))
Uma alternativa é estender em
UIApplication
vez de subclassificá-lo. De acordo com o iBook lançado pela Apple, as extensões em Swift podem:Se suas necessidades de subclasse
UIApplication
forem satisfeitas por esses recursos, uma extensão pode ser o caminho a percorrer.fonte
Crie uma subclasse de
UIApplication
e adicione sua lógicaCrie um
main.swift
arquivo que chame aUIApplicationMain()
função global [Sobre] , que é o novo ponto de entrada de seu aplicativo que é chamado pelo SO. Esta função recebe o argumento da função chamada,UIApplication
nome daUIApplicationDelegate
classe , nome da classe e inicia o loop de execução principal.Remova / comente a
@UIApplicationMain
anotação no padrãoAppDelegate
.@UIApplicationMain
geramain.swift
.Do contrário, você receberá um erro de compilação:
fonte