“UIApplicationMain”属性不能在包含顶级代码的模块中使用

所有的suden我在我的AppDelegate中得到了这个错误:

“’UIApplicationMain’属性不能在包含顶级代码的模块中使用”

在它所说的行:@UIApplicationMain

现在项目无法建立。 我正在使用Swift和Xcode 6.2。 我已经尝试删除派生数据文件夹,甚至使用最新的Xcode 6.3 beta,这是我第一次创建项目的地方。

我不知道发生了什么,我到处搜寻都没有运气。 谢谢

好的,我终于自己解决了。 似乎有另一个文件埋在我添加的库中,名为main.swift,这与我的AppDelegate冲突。 我删除了它,问题就消失了。

Apple文档,Swift /“文件和初始化” :

之前我们说大多数应用的源文件都不允许使用顶级代码。 例外是一个名为“main.swift”的特殊文件,其行为与操作文件非常相似,但是使用您应用的源代码构建。 “main.swift”文件可以包含顶级代码,并且依赖于顺序的规则也适用。 实际上,在“main.swift”中运行的第一行代码被隐式定义为程序的主要入口点。

项目中的某些文件使用顶级表达式,即任何函数或块之外的语句。 这只能在一个名为“main.swift”的文件中使用。

在Xcode中,Mac模板默认包含“main.swift”文件,但对于iOS应用程序,新iOS项目模板的默认设置是将@UIApplicationMain添加到常规Swift文件中。 这会导致编译器为您的iOS应用程序合成一个主入口点,并且不需要“main.swift”文件。

如果您的项目使用@UIApplicationMain ,则您的项目不能具有顶级表达式。 (根据我对XCode 8.2.1的经验,似乎它甚至不能有一个名为“main.swift”的文件,尽管我找不到这样的引用。)

这解释了为什么从项目中删除流氓main.swift文件会使错误消失。

同样的情况发生在一个包含main.swift的库中…删除那个并解决了问题。