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

dfs*_*sdf 13 swift

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

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

谢谢.

mat*_*att 17

好吧,你选了一个相当复杂的.在@仅仅意味着这是一个属性 -一种特殊的标记或信号编译器,如苹果的解释在这里.但这@UIApplicationMain是一个特别深刻的属性!它替代UIApplicationMainmain.m文件中C/Objective-C应用程序核心的整个实现(我在这里解释):

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil,
                                 NSStringFromClass([AppDelegate class]));
    }
}
Run Code Online (Sandbox Code Playgroud)

这是应用程序的主入口点,实现整个启动和运行的代码正在运行的应用程序.您可以在Swift中执行类似的操作 - 一个带有Swift等效代码的main.swift文件 - 但Swift通过让您使用该@UIApplicationMain属性指定应用程序委托类来省去麻烦.

如果您将项目作为Objective-C或Objective-C++项目启动,模板将为您提供包含实现的文件main,因此在这方面没有必要做任何特殊的事情.


Sco*_*man 7

以@开头的关键字是编译器的指令 - 例如,在视图控制器中@IBOutlet用于标识与可视化界面构建中的连接相关的变量声明(故事板或XIB文件 - 'IB'前缀代表'Interface Builder' ,这是Apple的设计工具部分的旧名称,它提供了用于可视化创建界面的GUI.

简而言之,@UIApplicationMain是Swift应用程序的一个指示器,它指示哪个对象是应用程序的主应用程序委托文件.在Objective-C应用程序模板中,您将拥有一个main.m设置应用程序委托的简单C文件.使用Swift,这个简单的实现成为一个单一的指令.

在这两种情况下,如果需要的话,可以用更复杂的东西替换琐碎的实现 - 但是在大多数应用程序中不需要任何其他东西,事实上如果你刚刚开始使用Swift,那么你需要一个非 - 通常实施最有可能为零.