ОБРАТИТЕ ВНИМАНИЕ, что синтаксис был обновлен для XCode 10.1 и Swift 5 в июне 2019 года (кредиты на ответ Мэтта здесь и ответ Тунг Фама здесь ), если вы ищете предыдущие синтаксисы, посмотрите раздел редактирования.
Хорошо, я нашел решение
Во-первых, я заметил, что в верхней части файла AppDelegate.swift есть строка
@UIApplicationMain
Поскольку эта строка выходит за рамки какой-либо области (она находится на уровне файла), она выполняется немедленно, и я предполагаю, что компилятор переведет ее в стандартную основную функцию.
Итак, я сделал это, начиная с нового приложения Swift-Only:
- закомментирован
@UIApplicationMain
- добавил такой файл main.swift (FLApplication - мой подкласс).
ВАЖНО, файл ДОЛЖЕН НАЗВАТЬСЯ main.swift, поскольку операторы верхнего уровня не поддерживаются в других файлах! Вы не можете добавить вызов UIApplicationMain () внутри любого другого файла, иначе вы получите эту ошибку:
Выражения не разрешены на верхнем уровне
Это файл main.swift
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv,
NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self)
)
Затем создайте быстрый файл для подкласса UIApplication, FLApplication.swift, с этим кодом:
import UIKit
import Foundation
class FLApplication: UIApplication {
override func sendEvent(_ event: UIEvent) {
super.sendEvent(event)
print("send event")
}
}
теперь UIApplication правильно разделен на подклассы, и вы увидите сообщения «отправить событие» в журнале
СТАРЫЕ РЕДАКЦИИ
Для справки, так как это сильно изменилось с версии 1 до версии 3, я оставляю здесь все предыдущие правки.
РЕДАКТИРОВАТЬ - МАРТ 2015
Как прокомментировал Ху Цзюньфэн, теперь объяснения UIApplicationMain
файла main.swift и файла main.swift задокументированы в разделе «Атрибуты» справочника по языку Swift: ссылка
Как прокомментировал Томас Вербеек. В бета-версии XCode 6.3 вы можете обнаружить, что C_ARGC и C_ARGV были переименованы в Process.argc и Process.unsafeArgv соответственно. Ваш вызов UIApplicationMain в файле main.swift необходимо обновить до:
UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
Синтаксис до XCode 8 был
import Foundation
import UIKit
UIApplicationMain(C_ARGC, C_ARGV, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
РЕДАКТИРОВАТЬ - ДЕКАБРЬ 2016 г.
Решение для Xcode 8, до бета 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()
параметры, а не добавить имя классаNSPrincipalClass
в app-info.plist?