【问题标题】:'Expressions are not allowed at the top level' if the module is not main.swift如果模块不是 main.swift,则“顶层不允许表达式”
【发布时间】:2014-08-29 19:28:25
【问题描述】:

main.swift 文件有什么特别之处吗?

我在 XCode 中创建了一个基于命令行的项目。如果我将表达式 println("Hello, World!"); 放入一个新的 swift 文件中说 test.swift,我将收到错误消息:Expressions are not allowed at the top level

然而,这个表达式被放置在由 XCode 在新项目中创建的 main.swift 的顶层。 XCode 没有标记此类异常。

【问题讨论】:

  • 运行文件的命令是什么?
  • 直接在 Xcode 中运行(播放按钮)
  • 甚至在我尝试运行它之前,XCode IDE 就已经标记了错误消息
  • 哦,你不能那样做。您正在尝试运行一个需要 main 方法的完整程序。相反,您可以从命令行运行它
  • 或者你可以把你要运行的代码放在main函数里面

标签: xcode swift


【解决方案1】:

显然是的,根据这个answer但是,没有关于这种行为的引用

更新 这记录在the Swift blog

...之前我们说过,大多数应用程序的源文件中不允许使用顶级代码。例外是一个名为“main.swift”的特殊文件,它的行为很像游乐场文件,但它是使用您的应用程序的源代码构建的。 “main.swift”文件可以包含顶级代码,并且顺序相关的规则也适用。实际上,在“main.swift”中运行的第一行代码被隐式定义为程序的主入口点。这允许最小的 Swift 程序只有一行——只要该行在“main.swift”中。

【讨论】:

    【解决方案2】:

    我想知道它是否真的是 main.swift 或者你有两个文件。这是一个简单的演示。

    文件夹:swift-testy
    文件 1:main.swift
    文件2:ex1.swift

    内容是:

    main.swift

    import Foundation
    
    println("Hello, World!")
    
    let chaulky = Dog()
    
    chaulky.bark()
    

    ex1.swift

    import Foundation
    
    class Dog {
        func bark() {
            println("woof") // This is a comment
        }
    }
    

    点击运行按钮时的输出

    你好,世界! 汪汪

    【讨论】:

    • 非常感谢。
    【解决方案3】:

    如果你有多个 swift 文件并且你正在构建一个命令行项目,那么请确保你有 main.swift 可用,它将作为你的应用程序的入口点。此外,main.swift 应该在您的模块中,否则您将收到以下错误:

    error: the package has an unsupported layout, unexpected source file(s) found: /Users/.../../Hello/main.swift
    

    修复:移动模块内的文件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多