在Objective C中很简单:只需更新main.m文件并更改UIApplicationMain()参数即可
return UIApplicationMain(argc, argv, NSStringFromClass([CustomUIApplication class]), NSStringFromClass([AppDelegate class]));
但是由于该指南指出,因此没有main.m文件
“在全局范围内编写的代码被用作程序的入口点,因此您不需要主要功能。”
那么,如何快速将UIApplication子类化?有什么建议吗?
注意: 如果您正在寻找以前的语法,请在2019年6月对XCode 10.1和Swift 5的语法进行了更新
好,我找到了解决方案
首先,我注意到,在AppDelegate.swift文件的顶部,有这行
@UIApplicationMain
由于该行在任何范围之外(在文件级别),因此将立即执行,并且我假设编译器将其转换为标准的main函数。
因此,我从一个新的Swift-Only应用程序开始执行此操作:
不允许在顶层使用表达式
这是main.swift文件
UIApplicationMain( CommandLine.argc, CommandLine.unsafeArgv, NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self) )
然后,使用以下代码为UIApplication子类FLApplication.swift创建一个swift文件:
import UIKit import Foundation class FLApplication: UIApplication { override func sendEvent(_ event: UIEvent) { super.sendEvent(event) print("send event") } }
现在,UIApplication已正确子类化,您将在日志中看到“发送事件”消息
旧版本 供参考,由于此版本从版本1到版本3发生了很大变化,因此我将所有以前的编辑保留在此处
编辑-2015年3月
正如UIApplicationMain胡俊峰所评论的那样,有关和main.swift文件的说明已记录在《 Swift语言参考:链接》的 “属性”部分中
UIApplicationMain
正如Thomas Verbeek在XCode 6.3 Beta中所评论的那样,您可能会发现C_ARGC和C_ARGV已分别重命名为Process.argc和Process.unsafeArgv。您在main.swift文件中的UIApplicationMain调用将需要更新为:
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年12月
Beta 6之前的Xcode 8解决方案
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) )