UWAGA składnia została zaktualizowana dla XCode 10.1 i Swift 5 w czerwcu 2019 r. (Podziękowania za odpowiedź Matta tutaj i odpowiedź Tung Fam tutaj ), jeśli szukasz poprzednich składni, spójrz na sekcję edycji.
Ok, znalazłem rozwiązanie
Po pierwsze, zauważyłem, że na górze pliku AppDelegate.swift znajduje się ta linia
@UIApplicationMain
Ponieważ ta linia jest poza jakimkolwiek zakresem (na poziomie pliku), jest wykonywana natychmiast i zakładam, że kompilator tłumaczy ją na standardową funkcję główną.
Tak więc zrobiłem to, zaczynając od nowej aplikacji Swift-Only:
- skomentowane
@UIApplicationMain
- dodał plik main.swift taki jak ten (FLApplication to moja podklasa).
WAŻNE plik MUSI BYĆ NAZWANY main.swift, ponieważ instrukcje najwyższego poziomu nie są obsługiwane w innych plikach! Nie możesz dodać wywołania UIApplicationMain () w żadnym innym pliku, w przeciwnym razie otrzymasz ten błąd:
Wyrażenia nie są dozwolone na najwyższym poziomie
To jest plik main.swift
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv,
NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self)
)
Następnie utwórz plik Swift dla podklasy UIApplication, FLApplication.swift, z następującym kodem:
import UIKit
import Foundation
class FLApplication: UIApplication {
override func sendEvent(_ event: UIEvent) {
super.sendEvent(event)
print("send event")
}
}
teraz UIApplication jest poprawnie podzielona na podklasy, a w dzienniku zobaczysz komunikaty o wysyłaniu zdarzeń
STARE EDYCJE
Dla odniesienia, ponieważ wiele się zmieniło od wersji 1 do wersji 3, zostawiam tutaj wszystkie poprzednie edycje
EDYCJA - MARZEC 2015
Jak skomentował Hu Junfeng, teraz wyjaśnienia dotyczące UIApplicationMain
pliku main.swift są udokumentowane w sekcji Attributes w The Swift Language Reference: Link
Jak skomentował Thomas Verbeek W wersji beta XCode 6.3 może się okazać, że nazwy C_ARGC i C_ARGV zostały zmienione odpowiednio na Process.argc i Process.unsafeArgv. Twoje wywołanie UIApplicationMain w pliku main.swift będzie wymagało aktualizacji do:
UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
Składnia pre-XCode 8 brzmiała
import Foundation
import UIKit
UIApplicationMain(C_ARGC, C_ARGV, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
EDYCJA - grudzień 2016 r
Rozwiązanie dla Xcode 8, przed wersją beta 6
import Foundation
import UIKit
UIApplicationMain(
CommandLine.argc,
UnsafeMutableRawPointer(CommandLine.unsafeArgv)
.bindMemory(
to: UnsafeMutablePointer<Int8>.self,
capacity: Int(CommandLine.argc)),
NSStringFromClass(FLApplication.self),
NSStringFromClass(AppDelegate.self)
)
UIApplicationMain()
parametrów, niż dodanie nazwy klasyNSPrincipalClass
w app-info.plist?