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?

Selvin
źródło

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.

nathan
źródło
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


źródło
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.

onmyway133
źródło
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

Bartosz Olszanowski
źródło