2014-12-14 8 views
15

Ho creato un progetto di esempio utilizzando Xcode 6 e la lingua come swift.Che cosa è l'utilizzo di @NSApplicationMain nel progetto di programmazione rapida in xcode

Xcode creato AppDelegate.swift con seguente codice

import Cocoa 

@NSApplicationMain 

class AppDelegate: NSObject, NSApplicationDelegate { 

    func applicationDidFinishLaunching(aNotification: NSNotification) { 
     // Insert code here to initialize your application 
    } 

    func applicationWillTerminate(aNotification: NSNotification) { 
     // Insert code here to tear down your application 
    } 


} 

Cosa significa @NSApplicationMain significare e dove è il mio file main.mm/main.m con main()?

+0

Possibile duplicato: http://stackoverflow.com/questions/24516250/what-does-uiapplicationmain-mean (questo è per iOS' '@ UIApplicationMain' ma lo stesso vale per' @ NSApplicationMain' in OSX) – Alladinian

risposta

28

Come menzionato nel release notes:

OS X applicazioni possono ora applicare l'attributo @NSApplicationMain alla loro app classe delegato al fine di generare un implicito principale per l'applicazione. Questo attributo funziona nello stesso modo come attributo @UIApplicationMain per le applicazioni iOS."

Quindi, in sostanza, è un modo di ottenere la vostra applicazione bootstrap e funzionante, senza dover scrivere qualche testo standard a livello globale in un separato . file di Swift Nelle precedenti versioni di Xcode, quando è stato creato un nuovo progetto Swift cacao, Xcode genererebbe un file main.swift per un nuovo progetto OS X che si presentava così:

import Cocoa 

NSApplicationMain(Process.argc, Process.unsafeArgv) 

E questo è stato il punto di ingresso principale. Ora Xcode non si preoccupa di generare questo file, ma semplicemente codifica il delegato dell'app con @NSApplicationMain e questo passaggio di avvio viene gestito dietro le quinte.

Informazioni da The Swift Programming Language:

Applicare questo attributo a una classe per indicare che è il delegato applicazione. L'uso di questo attributo equivale a chiamare la funzione NSApplicationMain e passare il nome di questa classe come nome della classe delegata.

Se non si utilizza questo attributo, fornire un file main.swift con una funzione main che chiama la funzione NSApplicationMain. Ad esempio, se la tua app utilizza una sottoclasse personalizzata di NSApplication come sua classe principale, chiama la funzione NSApplicationMain invece di utilizzare questo attributo.

+0

C'è un modo per usare un nome diverso per 'main.swift', forse c'è un'opzione per il compilatore? Sto cercando di trovare un modo per due obiettivi diversi di utilizzare i propri punti di ingresso 'main.swift', ma in qualche modo memorizzare entrambi nella stessa cartella. –

+0

@IanBytchek Se si utilizza l'attributo '@ NSApplicationMain', non penso che avrà importanza il nome del file, ma non lo sono su un Mac per controllare ora. Fintanto che ogni obiettivo include solo un punto di ingresso principale nella sua build, penso che sarebbe meglio archiviarli nella stessa cartella. Se hai problemi, dovresti probabilmente fare una nuova domanda sul tuo problema specifico. –

+0

La mia comprensione è che '@ NSApplicationMain' funziona solo davanti a un delegato dell'applicazione, non viene compilato quando viene inserito altrove. –

Problemi correlati