2015-05-06 258 views
9

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

另外,如果可能的话,请你给我在C++中的“等效”语句(如果存在)?

谢谢。

回答

13

那么,你选了一个相当复杂的。 @仅仅意味着这是一个属性 - 编译器的特殊标记或信号,如Apple explains here。但@UIApplicationMain是一个特别深刻的属性!它可以替代整个UIApplicationMain实现,就在于在C/Objective-C的应用程序的心脏,在的main.m文件(I explain here):

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

这是应用程序的主入口点,执行整个启动运行代码正在运行的应用程序。你可以做这样的事情在Swift - 一个main.swift文件与该代码的Swift等效 - 但Swift通过让您指定您的应用程序委托类与@UIApplicationMain属性为您节省了麻烦。

如果你开始一个项目作为一个Objective-C或Objective-C++项目,模板会给你包含main实施文件,所以没有必要做任何事情,在这方面特别。

+0

Thx。我刚才读过:[应用程序生命周期](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/TheAppLifeCycle/TheAppLifeCycle.html),并且最近去了'main '在我的Swift项目中......显然,找不到它。 – benc

+0

@benc you _can_删除'@ UIApplicationMain'并提供您自己的_main.swift_文件,如下所示:https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk1ch06p297main/bk1ch06p297main/main.swift但是现在我可以认为没有理由这样做。 – matt

3

以@开头的关键字是编译器的指令 - 例如,在视图控制器中,您使用@IBOutlet来标识与可视化界面内的连接有关的变量声明(一个故事板或XIB文件 - 'IB'前缀站'界面构建器',这是苹果设计工具的一部分的旧名称,它提供了用于直观地创建界面的GUI)。

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

在这两种情况下,如果需要的话,可以用更复杂的东西来代替微不足道的实现 - 但在大多数应用程序中不需要其他任何东西,事实上,如果您只是在Swift中开始使用,你需要一个不平凡的实现最可能是零。

相关问题