什么'@'符号在Swift中意味着什么?

时间:2015-05-06 15:36:11

标签: swift

我没有目标C的经验,所以我遇到了一些符号的问题。在我的“AppDelegate.swift”文件中,顶部有一个“@UIMainApplication”。这是什么意思?

另外,如果可能的话,您能否在C ++中给我“等效”声明(如果存在)?

感谢。

3 个答案:

答案 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...

[Objective-C property attributes]

[Java annotation]