В Objective C все было просто: достаточно было обновить файл main.m и изменить параметры UIApplicationMain ().
return UIApplicationMain(argc, argv, NSStringFromClass([CustomUIApplication class]), NSStringFromClass([AppDelegate class]));
Но в swift нет файла main.m, так как в руководстве говорится
«Код, написанный в глобальной области видимости, используется как точка входа для программы, поэтому вам не нужна основная функция».
Итак, как быстро создать подкласс UIApplication ?? Любое предложение?
ios
cocoa-touch
swift
LombaX
источник
источник
UIApplicationMain()
параметры, а не добавить имя классаNSPrincipalClass
в app-info.plist?Ответы:
Хорошо, я нашел решение
Во-первых, я заметил, что в верхней части файла AppDelegate.swift есть строка
@UIApplicationMain
Поскольку эта строка выходит за рамки какой-либо области (она находится на уровне файла), она выполняется немедленно, и я предполагаю, что компилятор переведет ее в стандартную основную функцию.
Итак, я сделал это, начиная с нового приложения Swift-Only:
@UIApplicationMain
ВАЖНО, файл ДОЛЖЕН НАЗВАТЬСЯ 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 правильно разделен на подклассы, и вы увидите сообщения «отправить событие» в журнале
РЕДАКТИРОВАТЬ - МАРТ 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) )
источник
sendEvent:
настоящее время (я помню, что приходилось делать это в iOS 3 ...)UIApplicationMain
иmain.swift
описаны в разделе Атрибуты Swift Language Reference. developer.apple.com/library/ios/documentation/Swift/Conceptual/…C_ARGC
иC_ARGV
были переименованы вProcess.argc
иProcess.unsafeArgv
соответственно. Ваш вызов UIApplicationMain в файле main.swift необходимо будет обновить доUIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(KBApplication), NSStringFromClass(AppDelegate))
Одна альтернатива - расширить его,
UIApplication
а не создавать подклассы. Согласно iBook, выпущенному Apple, расширения в Swift могут:Если ваши потребности в подклассах
UIApplication
удовлетворяются этими возможностями, расширение может быть подходящим вариантом.источник
Создайте подкласс
UIApplication
и добавьте свою логикуimport UIKit class CustomUIApplication: UIApplication { override func sendEvent(_ event: UIEvent) { super.sendEvent(event) } }
Создайте
main.swift
файл, который вызываетUIApplicationMain()
глобальную функцию [About] , которая является новой точкой входа в ваше приложение, вызываемое ОС. Эта функция получает аргумент от вызываемой функции,UIApplication
имяUIApplicationDelegate
класса, имя класса и запускает основной цикл выполнения.import UIKit UIApplicationMain( CommandLine.argc, CommandLine.unsafeArgv, NSStringFromClass(CustomUIApplication.self), //was created at step 1 NSStringFromClass(AppDelegate.self) )
Удалить / прокомментировать
@UIApplicationMain
аннотацию по умолчаниюAppDelegate
.@UIApplicationMain
генерируетmain.swift
.Если вы этого не сделаете, вы получите ошибку компиляции:
//@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { //... }
источник