Qual é o ponto de entrada da execução rápida de código?

105

Não há main()método no Swift. O programa deve iniciar a execução de algum lugar. Então, qual é o ponto de entrada da execução rápida de código e como isso é decidido?

Selvin
fonte

Respostas:

94

O ponto de entrada em um módulo Swift simples é o arquivo no módulo chamado main.swift. main.swifté o único arquivo que tem permissão para ter expressões e declarações no nível superior (todos os outros arquivos Swift no módulo podem conter apenas declarações).

Cocoa Touch usa o @UIApplicationMainatributo em uma implementação de em UIApplicationDelegatevez de um main.swiftarquivo para marcar o ponto de entrada. Cocoa costumava usar um main.swiftarquivo mínimo que simplesmente chamava NSApplicationMain, mas a partir do Xcode 6.1 usa o @NSApplicationMainatributo em uma implementação de NSApplicationDelegate.

Nathan
fonte
4
Eu criei um novo projeto xcode e não consigo encontrar o main.swiftarquivo em lugar nenhum. Qual é a localização deste arquivo?
Selvin
No Cocoa e no Cocoa Touch, os aplicativos main.swiftestão no grupo Arquivos de Suporte e são simplesmente configurados para chamar NSApplicationMain.
nathan
4
Não, não está no grupo de arquivos de suporte. Não está em nenhum lugar do projeto.
Selvin
1
Desculpe, eu estava errado sobre o Cocoa Touch, mas correto sobre o Cocoa. Veja minha resposta atualizada
nathan
Claro, mesmo no Cocoa Touch você pode criar e usar main.swift.
Sulthan
40

No AppDelegate.swiftarquivo você pode ver @UIApplicationMain.
O AppDelegate é o arquivo de entrada inicial.

Basicamente: main.me AppDelegate.msão meio que mesclados Swiftcom apenasAppDelegate.swift


fonte
2
@nathan Ele marcou iOS8 , isso vale Cocoa-Touch, minha resposta está certa.
Legal, eu estava me perguntando como eu poderia mudar main.m para swift e não encontrei nada.
Jalil
28

Você pode querer ler Arquivos e inicialização

A exceção é um arquivo especial denominado “main.swift”, que se comporta de forma muito semelhante a um arquivo de playground, mas é construído com o código-fonte do seu aplicativo. O arquivo “main.swift” pode conter código de nível superior e as regras dependentes do pedido também se aplicam. Na verdade, a primeira linha de código a ser executada em “main.swift” é definida implicitamente como o ponto de entrada principal do programa. Isso permite que o programa mínimo do Swift seja uma única linha - desde que essa linha esteja em “main.swift”.

No Xcode, os modelos do Mac padrão incluem um arquivo “main.swift”, mas para aplicativos iOS o padrão para novos modelos de projeto iOS é adicionar @UIApplicationMain a um arquivo Swift regular. Isso faz com que o compilador sintetize um ponto de entrada principal para seu aplicativo iOS e elimina a necessidade de um arquivo “main.swift”.

Alternativamente, você pode vincular uma implementação de main escrita em Objective-C, comum ao migrar projetos de forma incremental de Objective-C para Swift.

onmyway133
fonte
3
Achei que esta é uma explicação muito melhor e de alto nível de como o ponto de entrada é configurado no iOS.
Steven de
Boa resposta e bom link. Então, encontrei um bom lugar para colocar o código que precisa ser executado "cedo". Em vez de usar um dos métodos de delegado do aplicativo, simplesmente substituo o init no delegado do aplicativo e faço isso lá. Usei-o, por exemplo, para configurar o nível de registro padrão.
Charles
1

Em aplicativos Swift, existem atributos:

  • @UIApplicationMain (Cocoa Touch)
  • @NSApplicationMain (Cacau)

que informam ao compilador rápido onde está o ponto de entrada do aplicativo.

O que o compilador Swift faz por baixo do capô é que ele cria uma mainfunção, que basicamente se parece com os aplicativos Objective-C e trata esse método como o ponto de entrada do aplicativo (um primeiro método que é chamado quando o processo do aplicativo é iniciado).

Se você quiser ler mais sobre o que o compilador swift faz com Mainatributos, como o sistema operacional sabe onde está o ponto de entrada do aplicativo, eu o encorajo a ler este artigo: Entendendo o ponto de entrada do aplicativo iOS

Bartosz Olszanowski
fonte