Jaki jest punkt wejścia do szybkiego wykonania kodu?


105

Nie ma main()szybkiej metody. Program musi skądś rozpocząć wykonywanie. Jaki jest więc punkt wejścia do szybkiego wykonania kodu i jak się na to decyduje?

Odpowiedzi:


94

Punktem wejścia w zwykłym module Swift jest plik w module o nazwie main.swift. main.swiftjest jedynym plikiem, który może mieć wyrażenia i instrukcje na najwyższym poziomie (wszystkie inne pliki Swift w module mogą zawierać tylko deklaracje).

Cocoa Touch używa @UIApplicationMainatrybutu w implementacji UIApplicationDelegatezamiast main.swiftpliku, aby oznaczyć punkt wejścia. Cocoa używała minimalnego main.swiftpliku, który był po prostu wywoływany NSApplicationMain, ale od Xcode 6.1 używa @NSApplicationMainatrybutu w implementacji NSApplicationDelegate.


4
Utworzyłem nowy projekt xcode i nie mogę main.swiftnigdzie znaleźć pliku. Jaka jest lokalizacja tego pliku?
Selvin,

W aplikacjach Cocoa i Cocoa Touch main.swiftznajduje się w grupie Supporting Files i jest po prostu skonfigurowany do wywoływania NSApplicationMain.
nathan

4
Nie, nie ma go w grupie Supporting files. Nie ma go nigdzie w projekcie.
Selvin,

1
Przepraszam, myliłem się co do Cocoa Touch, ale zgadzam się co do Cocoa. Zobacz moją zaktualizowaną odpowiedź
nathan,

Oczywiście nawet w Cocoa Touch możesz tworzyć i używać main.swift.
Sulthan

40

W AppDelegate.swiftpliku możesz zobaczyć @UIApplicationMain.
AppDelegate jest początkowym plikiem wejściowym.

Zasadniczo: main.mi AppDelegate.msą trochę połączone Swiftz justAppDelegate.swift


2
@nathan Otagował iOS8 , to znaczyCocoa-Touch , moja odpowiedź jest prawidłowa.

Fajnie, zastanawiałem się, jak mogę zmienić main.m na swift i nie znalazłem ani jednej rzeczy.
Jalil

28

Możesz przeczytać pliki i inicjalizację

Wyjątkiem jest specjalny plik o nazwie „main.swift”, który zachowuje się podobnie jak plik placu zabaw, ale jest zbudowany na podstawie kodu źródłowego aplikacji. Plik „main.swift” może zawierać kod najwyższego poziomu i obowiązują również reguły zależne od kolejności. W efekcie pierwsza linia kodu uruchamiana w „main.swift” jest niejawnie definiowana jako główny punkt wejściowy programu. Dzięki temu minimalny program Swift może być pojedynczą linią - o ile ta linia znajduje się w „main.swift”.

W Xcode szablony dla komputerów Mac domyślnie zawierają plik „main.swift”, ale w przypadku aplikacji na iOS domyślną wartością dla nowych szablonów projektów iOS jest dodanie @UIApplicationMain do zwykłego pliku Swift. Powoduje to, że kompilator syntetyzuje główny punkt wejścia dla aplikacji na iOS i eliminuje potrzebę stosowania pliku „main.swift”.

Alternatywnie możesz utworzyć link w implementacji głównego napisanego w Objective-C, typowego podczas przyrostowej migracji projektów z Objective-C do Swift.


3
Okazało się, że jest to o wiele lepsze i wyższe wyjaśnienie konfiguracji punktu wejścia w iOS.
Steven

Dobra odpowiedź i dobry link. Potem znalazłem dobre miejsce na umieszczenie kodu, który musi działać „wcześnie”. Zamiast używać jednej z metod delegata aplikacji, po prostu nadpisuję init w delegacie aplikacji i robię to tam. Użyłem go np. Do ustawienia domyślnego poziomu logowania.
charles

1

W aplikacjach Swift są atrybuty:

  • @UIApplicationMain (Dotyk kakaowy)
  • @NSApplicationMain (Kakao)

które mówią szybkiemu kompilatorowi, gdzie jest punkt wejścia aplikacji.

To, co robi szybki kompilator pod maską, polega na tym, że tworzy mainfunkcję, która zasadniczo wygląda tak samo jak w aplikacjach Objective-C i traktuje tę metodę jako punkt wejścia aplikacji (pierwsza metoda, która jest wywoływana podczas uruchamiania procesu aplikacji).

Jeśli chcesz przeczytać więcej o tym, co szybki kompilator robi z Mainatrybutami, skąd system operacyjny wie, gdzie jest punkt wejścia aplikacji, zachęcam do przeczytania tego artykułu: Zrozumienie punktu wejścia aplikacji na iOS


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.