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

17
突然间我在 AppDelegate 里遇到了这个错误:

'UIApplicationMain' 属性不能被用于包含顶级代码的模块

错误出现在代码行:@UIApplicationMain 项目现在无法构建。我正在使用 Swift 和 Xcode 6.2。我已尝试删除派生数据文件夹,甚至使用最新的 Xcode 6.3 beta,这是我第一次创建该项目的地方。
我不知道发生了什么,已经到处搜寻了也没有结果。 谢谢。
3个回答

36

好的,我最终自己解决了它。看起来在我添加的一个名为 main.swift 的库中还有另一个文件,与我的 AppDelegate 发生了冲突。我删除了它,问题就解决了。


12

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

早些时候我们说过,在大多数应用程序源文件中,不允许使用顶层代码。例外情况是一个名为“main.swift”的特殊文件,它的行为类似于playground文件,但是由您的应用程序源代码构建。“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”文件。


5

我遇到了一个包含main.swift文件的库相同的问题...删除它就解决了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接