注意: 如果您正在寻找以前的语法,请在2019年6月对XCode 10.1和Swift
5的语法进行了更新
好,我找到了解决方案
首先,我注意到,在AppDelegate.swift文件的顶部,有这行
@UIApplicationMain
由于该行在任何范围之外(在文件级别),因此将立即执行,并且我假设编译器将其转换为标准的main函数。
因此,我从一个新的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创建一个swift文件:
import UIKitimport Foundationclass FLApplication: UIApplication { override func sendEvent(_ event: UIEvent) { super.sendEvent(event) print("send event") }}现在,UIApplication已正确子类化,您将在日志中看到“发送事件”消息
旧版本
供参考,由于此版本从版本1到版本3发生了很大变化,因此我将所有以前的编辑保留在此处
编辑-2015年3月
正如
UIApplicationMain胡俊峰所评论的那样,有关和main.swift文件的说明已记录在《
Swift语言参考:链接》的
“属性”部分中
正如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 Foundationimport UIKitUIApplicationMain(C_ARGC, C_ARGV, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
编辑-2016年12月
Beta 6之前的Xpre 8解决方案
import Foundationimport UIKitUIApplicationMain( CommandLine.argc, UnsafeMutableRawPointer(CommandLine.unsafeArgv) .bindMemory( to: UnsafeMutablePointer<Int8>.self, capacity: Int(CommandLine.argc)), NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self))



