¿Cuál es el punto de entrada de la ejecución de código rápido?

105

No hay main()método en Swift. El programa debe iniciar la ejecución desde algún lugar. Entonces, ¿cuál es el punto de entrada de la ejecución de código rápido y cómo se decide?

Selvin
fuente

Respuestas:

94

El punto de entrada en un módulo Swift simple es el archivo en el módulo llamado main.swift. main.swiftes el único archivo que puede tener expresiones y declaraciones en el nivel superior (todos los demás archivos Swift en el módulo solo pueden contener declaraciones).

Cocoa Touch usa el @UIApplicationMainatributo en una implementación de en UIApplicationDelegatelugar de un main.swiftarchivo para marcar el punto de entrada. Cocoa solía usar un main.swiftarchivo mínimo que simplemente llamaba NSApplicationMain, pero a partir de Xcode 6.1 usa el @NSApplicationMainatributo en una implementación de NSApplicationDelegate.

nathan
fuente
4
Creé un nuevo proyecto de xcode y no puedo encontrar el main.swiftarchivo en ninguna parte. ¿Cuál es la ubicación de este archivo?
Selvin
En las aplicaciones Cocoa y Cocoa Touch se main.swiftencuentra en el grupo Archivos de apoyo y simplemente está configurado para llamar NSApplicationMain.
Nathan
4
No, no está en el grupo de archivos de apoyo. No está en ninguna parte del proyecto.
Selvin
1
Lo siento, estaba equivocado con Cocoa Touch, pero tenía razón con Cocoa. Ver mi respuesta actualizada
nathan
Por supuesto, incluso en Cocoa Touch puedes crear y usar main.swift.
Sulthan
40

En el AppDelegate.swiftarchivo puedes ver @UIApplicationMain.
AppDelegate es el archivo de entrada inicial.

Básicamente: main.my AppDelegate.mse fusionan un poco en SwiftsoloAppDelegate.swift


fuente
2
@nathan Etiquetó iOS8 , eso es así Cocoa-Touch, mi respuesta es correcta.
Bien, me preguntaba cómo podría cambiar main.m a swift y no encontré nada.
Jalil
28

Es posible que desee leer Archivos e inicialización

La excepción es un archivo especial llamado "main.swift", que se comporta de manera muy similar a un archivo de juegos, pero está construido con el código fuente de su aplicación. El archivo “main.swift” puede contener código de nivel superior y también se aplican las reglas dependientes del orden. En efecto, la primera línea de código que se ejecuta en "main.swift" se define implícitamente como el punto de entrada principal para el programa. Esto permite que el programa Swift mínimo sea una sola línea, siempre que esa línea esté en "main.swift".

En Xcode, las plantillas de Mac incluyen de forma predeterminada un archivo "main.swift", pero para las aplicaciones de iOS, el valor predeterminado para las nuevas plantillas de proyectos de iOS es agregar @UIApplicationMain a un archivo Swift normal. Esto hace que el compilador sintetice un punto de entrada principal para su aplicación iOS y elimina la necesidad de un archivo "main.swift".

Alternativamente, puede vincular una implementación de main escrita en Objective-C, común cuando se migran proyectos de Objective-C a Swift de forma incremental.

onmyway133
fuente
3
Encontré que esta es una explicación mucho mejor y de mayor nivel de cómo se configura el punto de entrada en iOS.
Steven
Buena respuesta y buen enlace. Luego encontré un buen lugar para colocar el código que debe ejecutarse "temprano". En lugar de usar uno de los métodos de delegado de la aplicación, simplemente anulo init en el delegado de la aplicación y lo hago allí. Lo usé, por ejemplo, para configurar el nivel de registro predeterminado.
charles
1

En las aplicaciones Swift hay atributos:

  • @UIApplicationMain (Toque de cacao)
  • @NSApplicationMain (Cacao)

que le dicen al compilador rápido dónde está el punto de entrada de la aplicación.

Lo que hace el compilador rápido bajo el capó es que crea una mainfunción, que básicamente tiene el mismo aspecto que en las aplicaciones Objective-C y trata este método como el punto de entrada de la aplicación (un primer método que se llama cuando se inicia el proceso de la aplicación).

Si desea leer más sobre lo que hace el compilador rápido con los Mainatributos, cómo el sistema operativo sabe dónde está el punto de entrada de la aplicación, le animo a leer este artículo: Comprender el punto de entrada de la aplicación iOS

Bartosz Olszanowski
fuente