Lom*_*baX 88 cocoa-touch ios swift
在Objective C中很简单:更新main.m文件并更改UIApplicationMain()参数就足够了
return UIApplicationMain(argc, argv, NSStringFromClass([CustomUIApplication class]), NSStringFromClass([AppDelegate class]));
Run Code Online (Sandbox Code Playgroud)
但是在swift中没有main.m文件,因为指南说
"在全局范围编写的代码用作程序的入口点,因此您不需要主函数."
那么,如何在swift中继承UIApplication?有什么建议吗?
Lom*_*baX 167
好的,我找到了解决方案首先,我注意到,在AppDelegate.swift文件的顶部,有这一行
@UIApplicationMain
Run Code Online (Sandbox Code Playgroud)
由于这一行在任何范围之外(它在文件级别),它立即执行,我假设编译器将其转换为标准主函数.
所以,我这样做了,从一个新的Swift-Only应用程序开始:
@UIApplicationMain
顶级不允许使用表达式
这是main.swift文件
注意在2018年9月的XCode 10中已经更新了语法 - 如果您正在寻找之前的语法,请查看编辑部分的亚特答案.
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv,
NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self)
)
Run Code Online (Sandbox Code Playgroud)
然后,使用以下代码为UIApplication子类FLApplication.swift创建一个swift文件:
import UIKit
import Foundation
class FLApplication: UIApplication {
override func sendEvent(_ event: UIEvent) {
super.sendEvent(event)
print("send event")
}
}
Run Code Online (Sandbox Code Playgroud)
现在,UIApplication被正确地子类化了,你会在日志中看到"发送事件"消息
旧编辑
作为参考,由于这已从版本1更改为版本3,因此我将在此处保留以前的所有编辑内容
编辑 - 2015年3月
正如UIApplicationMain
胡俊峰评论的那样,关于和.sift文件的解释记录在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))
Run Code Online (Sandbox Code Playgroud)
pre-XCode 8语法是
import Foundation
import UIKit
UIApplicationMain(C_ARGC, C_ARGV, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
Run Code Online (Sandbox Code Playgroud)
编辑 - 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)
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19417 次 |
最近记录: |