Was bedeutet "@UIApplicationMain"?


81

Ich habe gerade mein erstes Swift-Projekt erstellt. In der AppDelegate.swiftZeile über einer Klassendeklaration befindet sich eine Zeile - warum ist sie dort?!

...
import UIKit
import CoreData

@UIApplicationMain // <- WHY IS IT HERE?
class AppDelegate: UIResponder, UIApplicationDelegate {
... 

Antworten:


131

Das @UIApplicationMainAttribut in Swift ersetzt die triviale main.mDatei in Objective-C-Projekten (deren Zweck darin besteht, die mainFunktion zu implementieren , die der Einstiegspunkt für alle C-Programme ist, und den Aufruf UIApplicationMainzum Starten der Cocoa Touch-Ausführungsschleife und der App-Infrastruktur).

In Objective-C ist das Hauptbit (heh) der Konfiguration pro App, das die UIApplicationMainFunktion bereitstellt, das Festlegen einer der benutzerdefinierten Klassen Ihrer App als Delegat des gemeinsam genutzten UIApplicationObjekts. In Swift können Sie diese Klasse einfach festlegen, indem Sie das @UIApplicationMainAttribut zur Deklaration dieser Klasse hinzufügen . (Sie können die UIApplicationMainFunktion auch weiterhin direkt aufrufen, wenn Sie Grund dazu haben. In Swift fügen Sie diesen Aufruf in Code der obersten Ebene in eine main.swiftDatei ein.)

@UIApplicationMainist nur für iOS. In OS X wird der App-Delegat traditionell in der von der Info.plist angegebenen Haupt-Nib-Datei festgelegt (das gleiche für Swift wie für ObjC). Bei OS X-Storyboards gibt es jedoch keine Haupt-Nib-Datei @NSApplicationMain.


1
Auf Seite 58 in The Swift Programming Language fand ich den Abschnitt Attribute interessant.
János

1
Ich hätte die Dokumente in meiner Antwort zitiert, aber für dieses Attribut scheint es noch keine zu geben. Die Attribute - Seite zu finden ist , wo Sie wahrscheinlich würde es finden.
Rickster

3
Eine Beschreibung für UIApplicationMaingibt es jetzt. developer.apple.com/library/ios/documentation/Swift/Conceptual/…
Quinn Taylor

2
Beachten Sie in Bezug auf Ihren letzten Satz, dass OS X das entsprechende @NSApplicationMain
Bill

@UIApplicationMain ist auch für tvOS
Shaked Sayag

7

Das @ UIApplicationMain-Attribut ersetzt die Datei main.m und den Einstiegspunkt für den Start Ihrer Anwendung.

Eine weitere Sache, die Ihr Programm ohne diese @UIApplicationMain ausführen kann, ist lediglich ein Kommentar // @ UIApplicationMain` create main.swift wie main.m in Ziel c und schreiben Sie den folgenden Code. Dies ist der Einstiegspunkt Ihrer Bewerbung

import Foundation
class FLApplication: UIApplication
{
    override func sendEvent(event: UIEvent!)
    {
        println("Entry Point") // this is an example
    }
}

1
Wenn ich das mache, wird es kompiliert und ausgeführt, aber nach der Installation der App beendet und sendEvent wird nie aufgerufen. Na und? :)
StuFF mc

Weitere Infos hier: stackoverflow.com/questions/24020000/… - aber wieder lande ich nicht in sendEvent ...
StuFF mc

@StuFFmc danke für diese Info. Die sendEvent-Methode wurde auch für mich nicht aufgerufen.
dellos

2
Der FoundationImport, die FLApplication, die zufällige Unterklasse, ohne die Verwendung der Unterklasse zu deklarieren ... Entschuldigung, aber keine dieser Antworten ist sinnvoll, außer dem ersten Satz.
Ephemer

7

Die Quelldatei AppDelegate.swift hat zwei Hauptfunktionen:

  • Es erstellt den Einstiegspunkt für Ihre App und eine Ausführungsschleife, die Eingabeereignisse an Ihre App liefert. Diese Arbeit wird vom UIApplicationMain- Attribut (@UIApplicationMain) ausgeführt , das oben in der Datei angezeigt wird . UIApplicationMain erstellt ein Anwendungsobjekt, das für die Verwaltung des Lebenszyklus der App verantwortlich ist, und ein App-Delegatenobjekt.

  • Es definiert die AppDelegate- Klasse, die Blaupause für das App-Delegatenobjekt. Der App-Delegat erstellt das Fenster, in dem der Inhalt Ihrer App gezeichnet wird, und bietet einen Ort, an dem auf Statusübergänge innerhalb der App reagiert werden kann. In der AppDelegate-Klasse schreiben Sie Ihren benutzerdefinierten Code auf App-Ebene.


Hey @Manju ....... Ich habe meine UIApplication main als TimerUiApplication überschrieben ............. Ich habe eine Variable darin .......... Wie mache ich das? Ändern Sie diese Variable meiner UIApplication von meinem uiViewController .....................
Cloy

3

Nachdem die Swift-Dokumentation aktualisiert wurde, finden Sie hier die entsprechende Passage:

NSApplicationMain

Wenden Sie dieses Attribut auf eine Klasse an, um anzugeben, dass es sich um den Anwendungsdelegierten handelt. Die Verwendung dieses Attributs entspricht dem Aufrufen der Funktion NSApplicationMain ( : :) und der Übergabe des Klassennamens als Name der Delegatenklasse.

Wenn Sie dieses Attribut nicht verwenden, geben Sie eine Datei main.swift mit einer Funktion main () an, die die Funktion NSApplicationMain ( : :) aufruft . Wenn Ihre App beispielsweise eine benutzerdefinierte Unterklasse von NSApplication als Hauptklasse verwendet, rufen Sie die Funktion NSApplicationMain auf, anstatt dieses Attribut zu verwenden.

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Attributes.html


0

@UIApplicationMain ist ein Attribut, das auf die unten deklarierte Klasse AppDelegate angewendet wird, um weitere Informationen zu dieser Klasse bereitzustellen.

In diesem Fall gibt das Attribut @UIApplicationMain an, dass die Klasse AppDelegate der Anwendungsdelegierte Ihrer App ist.


0

UIApplicationMain Wenden Sie dieses Attribut auf eine Klasse an, um anzugeben, dass es sich um den Anwendungsdelegierten handelt. Die Verwendung dieses Attributs entspricht dem Aufrufen der UIApplicationMain-Funktion und der Übergabe des Klassennamens als Name der Delegatenklasse. (Quelle)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.