NOTA la sintassi è stato aggiornato per XCode 10.1 e Swift 5 a giugno 2019 (crediti a risposta di Matt qui && risposta di Tung Fam qui ), se siete alla ricerca per le sintassi precedenti cerca nella sezione di modifica.
Ok, ho trovato la soluzione
Per prima cosa, ho notato che, all'inizio del file AppDelegate.swift, c'è questa riga
@UIApplicationMain
Poiché questa riga è al di fuori di qualsiasi ambito (è a livello di file), viene eseguita immediatamente e presumo che il compilatore la traduca in una funzione principale standard.
Quindi l'ho fatto, partendo da una nuova applicazione Swift-Only:
- commentata
@UIApplicationMain
- aggiunto un file main.swift come questo (FLApplication è la mia sottoclasse).
IMPORTANTE il file DEVE ESSERE NOMINATO main.swift, poiché le istruzioni di primo livello non sono supportate su altri file! Non puoi aggiungere la chiamata UIApplicationMain () all'interno di qualsiasi altro file, altrimenti riceverai questo errore:
Le espressioni non sono consentite al livello superiore
Questo è il file main.swift
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv,
NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self)
)
Quindi, crea un file swift per la sottoclasse UIApplication, FLApplication.swift, con questo codice:
import UIKit
import Foundation
class FLApplication: UIApplication {
override func sendEvent(_ event: UIEvent) {
super.sendEvent(event)
print("send event")
}
}
ora, UIApplication è correttamente sottoclasse e vedrai i messaggi di "invio evento" nel log
VECCHIE MODIFICHE
Per riferimento, poiché questo è cambiato molto dalla versione 1 alla versione 3, lascio qui tutte le modifiche precedenti
EDIT - MARZO 2015
Come commentato da Hu Junfeng, ora le spiegazioni UIApplicationMain
e il file main.swift sono documentati nella sezione Attributes di The Swift Language Reference: Link
Come commentato da Thomas Verbeek In XCode 6.3 Beta, potresti scoprire che C_ARGC e C_ARGV sono stati rinominati rispettivamente Process.argc e Process.unsafeArgv. La tua chiamata UIApplicationMain nel file main.swift dovrà essere aggiornata a:
UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
La sintassi precedente a XCode 8 era
import Foundation
import UIKit
UIApplicationMain(C_ARGC, C_ARGV, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
EDIT - DIC 2016
Soluzione per Xcode 8, prima della 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()
parametri piuttosto che aggiungere il nome della classeNSPrincipalClass
in app-info.plist?