Co oznacza „@UIApplicationMain”?

82

Właśnie utworzyłem mój pierwszy projekt Swift, w AppDelegate.swiftlinii nad deklaracją klasy znajduje się wiersz - dlaczego tam jest ?!

...
import UIKit
import CoreData

@UIApplicationMain // <- WHY IS IT HERE?
class AppDelegate: UIResponder, UIApplicationDelegate {
... 
János
źródło

Odpowiedzi:

135

@UIApplicationMainAtrybut w Swift zastępuje trywialne main.mplik znajduje się w projektach Objective-C (których celem jest wdrożenie mainfunkcji, która jest punktem wyjścia dla wszystkich programów C i rozmowy UIApplicationMainskopać pętli biegu Cocoa Touch i infrastruktury APP).

W Objective-C głównym (heh) bitem konfiguracji aplikacji, którą UIApplicationMainzapewnia funkcja, jest wyznaczenie jednej z niestandardowych klas aplikacji jako delegata UIApplicationobiektu udostępnionego . W Swift, można łatwo wyznaczyć tę klasę dodając ten @UIApplicationMainatrybut tej klasy deklaracją. (Możesz również nadal wywoływać UIApplicationMainfunkcję bezpośrednio, jeśli masz ku temu powód. W Swift umieszczasz to wywołanie w kodzie najwyższego poziomu w main.swiftpliku).

@UIApplicationMaindotyczy tylko systemu iOS. W OS X delegat aplikacji jest tradycyjnie ustawiany w głównym pliku stalówki wyznaczonym przez Info.plist (tak samo dla Swift jak dla ObjC) - ale w przypadku scenorysów OS X nie ma głównego pliku stalówki, więc @NSApplicationMainrobi to samo.

rickster
źródło
1
Na stronie 58 w The Swift Programming Language znalazłem sekcję Attributes, która jest interesująca.
János
1
Zacytowałbym dokumenty w mojej odpowiedzi, ale wydaje się, że nie ma jeszcze żadnych dla tego atrybutu. Atrybuty strona znalazłeś gdzie prawdopodobnie będzie go znaleźć.
rickster
3
Opis UIApplicationMainjest tam teraz. developer.apple.com/library/ios/documentation/Swift/Conceptual/…
Quinn Taylor
2
W swoim ostatnim zdaniu zauważ, że OS X ma odpowiednik @NSApplicationMain
Bill
@UIApplicationMain jest również dla tvOS
Shaked Sayag
7

Atrybut @UIApplicationMain zastępuje & plik main.m oraz punkt wejścia do uruchomienia aplikacji.

Jeszcze jedna rzecz, którą Twój program może działać bez tego @UIApplicationMain wszystko, co musisz zrobić, to skomentować // @ UIApplicationMain` utwórz main.swift to samo co main.m w celu c i napisz poniższy kod. to będzie punkt wejścia Twojej aplikacji

import Foundation
class FLApplication: UIApplication
{
    override func sendEvent(event: UIEvent!)
    {
        println("Entry Point") // this is an example
    }
}
Priyanka
źródło
1
Jeśli to zrobię, kompiluje się i uruchamia, ale kończy się po zainstalowaniu aplikacji, a sendEvent nigdy nie jest wywoływana. Więc co? :)
StuFF mc
Więcej informacji tutaj: stackoverflow.com/questions/24020000/… - ale znowu nie ląduję w sendEvent ...
StuFF mc
@StuFFmc dziękuję za te informacje. Metoda sendEvent też mnie nie wywołała.
dellos
2
FoundationImport, FLApplication, losowy subclassing bez wypowiedzenia dowolnego korzystania z podklasy ... Niestety, ale żadna z tych odpowiedzi sens z wyjątkiem pierwszego zdania.
efemer
7

Plik źródłowy AppDelegate.swift ma dwie podstawowe funkcje:

  • Tworzy punkt wejścia do aplikacji i pętlę uruchamiania, która dostarcza zdarzenia wejściowe do aplikacji. Ta praca jest wykonywana przez atrybut UIApplicationMain (@UIApplicationMain) , który pojawia się w górnej części pliku. UIApplicationMain tworzy obiekt aplikacji, który jest odpowiedzialny za zarządzanie cyklem życia aplikacji i obiektem delegata aplikacji.

  • Definiuje klasę AppDelegate , plan obiektu delegata aplikacji. Delegat aplikacji tworzy okno, w którym jest rysowana zawartość aplikacji, i zapewnia miejsce do reagowania na przejścia między stanami w aplikacji. Klasa AppDelegate służy do pisania niestandardowego kodu na poziomie aplikacji.

Tharindu
źródło
Hej @Manju ....... Zastąpiłem mój główny UIApplication jako TimerUiApplication ............. Mam w nim zmienną .......... Jak mogę zmodyfikuj tę zmienną mojego UIApplication z mojego uiViewController .....................
Cloy Kwietnia
3

Teraz, gdy dokumentacja Swift jest zaktualizowana, oto odpowiedni fragment:

NSApplicationMain

Zastosuj ten atrybut do klasy, aby wskazać, że jest to delegat aplikacji. Użycie tego atrybutu jest równoznaczne z wywołaniem funkcji NSApplicationMain ( : :) i przekazaniem nazwy tej klasy jako nazwy klasy delegata.

Jeśli nie używasz tego atrybutu, podaj plik main.swift z funkcją main (), która wywołuje funkcję NSApplicationMain ( : :). Na przykład, jeśli aplikacja używa niestandardowej podklasy NSApplication jako klasy głównej, wywołaj funkcję NSApplicationMain zamiast używać tego atrybutu.

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

William Entriken
źródło
0

@UIApplicationMain jest atrybutem stosowanym do klasy zadeklarowanej poniżej AppDelegate , aby zapewnić więcej informacji o tej klasie.

W tym przypadku atrybut @UIApplicationMain wskazuje, że klasa AppDelegate jest delegatem aplikacji Twojej aplikacji.

ERN
źródło
0

UIApplicationMain Zastosuj ten atrybut do klasy, aby wskazać, że jest to delegat aplikacji. Użycie tego atrybutu jest równoznaczne z wywołaniem funkcji UIApplicationMain i przekazaniem nazwy tej klasy jako nazwy klasy delegata. (Źródło)

michael I.
źródło