我没有目标C的经验,所以我遇到了一些符号的问题。在我的“AppDelegate.swift”文件中,顶部有一个“@UIMainApplication”。这是什么意思?
另外,如果可能的话,您能否在C ++中给我“等效”声明(如果存在)?
感谢。
答案 0 :(得分:17)
@
仅表示这是属性 - 编译器的特殊标记或信号,如Apple explains here。但@UIApplicationMain
是一个特别深刻的属性!它替代了位于C / Objective-C应用程序核心的整个UIApplicationMain
实现,位于 main.m 文件中(作为I explain here):
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil,
NSStringFromClass([AppDelegate class]));
}
}
这是应用程序的主要入口点,实现 正在运行的应用程序的整个启动并运行代码。你可以在Swift中执行类似的操作 - 一个带有Swift等效代码的 main.swift 文件 - 但是Swift通过让你指定你的app delegate类来省去麻烦使用@UIApplicationMain
属性。
如果您将项目作为Objective-C或Objective-C ++项目启动,该模板将为您提供包含main
实现的主文件,因此无需执行任何操作在这方面特别。
答案 1 :(得分:6)
以@开头的关键字是编译器的指令 - 例如,在视图控制器中,您使用@IBOutlet
来标识与可视化界面构建中的连接相关的变量声明(故事板或XIB文件 - &# 39; IB'前缀代表' Interface Builder',这是Apple的设计工具部分的旧名称,它提供了可视化创建界面的GUI。
简而言之,@UIApplicationMain
是Swift应用程序的指示器,指示哪个对象是您的应用程序的主应用程序委托文件。在Objective-C应用程序模板中,您将拥有一个简单的main.m
C文件来设置应用程序委托。使用Swift,这个简单的实现就变成了一个单一的指令。
在这两种情况下,如果需要的话,可以用更复杂的东西替换琐碎的实现 - 但在大多数应用程序中不需要任何其他东西,事实上如果你只是刚开始使用Swift,那么机会很多你需要一个非平凡的实现很可能是零。
答案 2 :(得分:0)
Swift 属性
Swift attribute 是一个标记,编译器使用它来执行一些特定的逻辑。这是一种面向方面的方法
@<attribute_name>(<attribute_arguments>)
@NSApplicationMain, [@UIApplicationMain] - 生成 main.swift
[@objc vs @objcMembers]
[@noescape vs @escaping]
[@autoclosure]
[@testable]
有一些私有属性,如 @_exported
、@inline
...