Qual è il punto di ingresso dell'esecuzione del codice swift?


105

Non esiste un main()metodo rapido. Il programma deve avviare l'esecuzione da qualche parte. Allora qual è il punto di ingresso dell'esecuzione del codice swift e come viene deciso?

Risposte:


94

Il punto di ingresso in un semplice modulo Swift è il file nel modulo chiamato main.swift. main.swiftè l'unico file a cui è consentito avere espressioni e istruzioni al livello superiore (tutti gli altri file Swift nel modulo possono contenere solo dichiarazioni).

Cocoa Touch utilizza l' @UIApplicationMainattributo su un'implementazione UIApplicationDelegateinvece di un main.swiftfile per contrassegnare il punto di ingresso. Cocoa usava un main.swiftfile minimale che chiamava semplicemente NSApplicationMain, ma a partire da Xcode 6.1 utilizza l' @NSApplicationMainattributo su un'implementazione di NSApplicationDelegate.


4
Ho creato un nuovo progetto xcode e non riesco a trovare main.swiftfile da nessuna parte. Qual è la posizione di questo file?
Selvin

Nelle applicazioni Cocoa e Cocoa Touch si main.swifttrova nel gruppo File di supporto ed è semplicemente configurato per la chiamata NSApplicationMain.
nathan

4
No, non è presente nel gruppo File di supporto. Non è da nessuna parte nel progetto.
Selvin

1
Mi spiace, mi sbagliavo su Cocoa Touch, ma ho corretto su Cocoa. Vedi la mia risposta aggiornata
nathan

Ovviamente anche in Cocoa Touch puoi creare e utilizzare main.swift.
Sulthan

40

Nel AppDelegate.swiftfile puoi vedere @UIApplicationMain.
L'AppDelegate è il file di ingresso iniziale.

Fondamentalmente: main.me AppDelegate.msono un po 'fusi in SwiftjustAppDelegate.swift


2
@nathan Ha taggato iOS8 , questo vale Cocoa-Touch, la mia risposta è giusta.

Bello, mi chiedevo come avrei potuto cambiare main.m in swift e non ho trovato una sola cosa.
Jalil

28

Potresti voler leggere File e inizializzazione

L'eccezione è un file speciale denominato "main.swift", che si comporta in modo molto simile a un file playground, ma è costruito con il codice sorgente della tua app. Il file "main.swift" può contenere codice di primo livello e si applicano anche le regole dipendenti dall'ordine. In effetti, la prima riga di codice da eseguire in "main.swift" è implicitamente definita come il punto di ingresso principale del programma. Ciò consente al programma Swift minimo di essere una singola riga, purché tale riga sia in "main.swift".

In Xcode, i modelli Mac includono per impostazione predefinita un file "main.swift", ma per le app iOS l'impostazione predefinita per i nuovi modelli di progetto iOS consiste nell'aggiungere @UIApplicationMain a un normale file Swift. Ciò fa sì che il compilatore sintetizzi un punto di ingresso principale per la tua app iOS ed elimina la necessità di un file "main.swift".

In alternativa, è possibile collegare un'implementazione di main scritta in Objective-C, comune quando si migrano in modo incrementale i progetti da Objective-C a Swift.


3
Ho trovato che questo sia un modo migliore e una spiegazione di livello superiore di come il punto di ingresso è impostato in iOS.
Steven

Bella risposta e buon collegamento. Ho quindi trovato un buon posto in cui inserire il codice che deve essere eseguito "presto". Anziché utilizzare uno dei metodi delegato dell'app, sovrascrivo semplicemente init sul delegato dell'app e lo faccio lì. L'ho usato ad esempio per impostare il livello di registrazione predefinito.
charles

1

Nelle app Swift ci sono attributi:

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

che dicono al compilatore rapido dov'è il punto di ingresso dell'applicazione.

Ciò che il compilatore rapido fa sotto il cofano è che crea una mainfunzione, che fondamentalmente ha lo stesso aspetto delle app Objective-C e tratta questo metodo come punto di ingresso dell'app (un primo metodo che viene chiamato quando viene avviato il processo dell'applicazione).

Se vuoi saperne di più su cosa fa il compilatore rapido con gli Mainattributi, su come il sistema operativo sa dove si trova il punto di ingresso dell'applicazione, ti incoraggio a leggere questo articolo: Comprensione del punto di ingresso dell'app iOS


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.