【问题标题】:what does this mean ? Declaration is only valid at file scope这是什么意思 ?声明仅在文件范围内有效
【发布时间】:2015-03-26 23:12:51
【问题描述】:

您好,我是编码新手,我想知道为什么这不起作用。首先,我正在尝试创建一个按钮,您单击该按钮将打开一个将运行的 applescript。

但我不断收到此错误。

声明仅在文件范围内有效


import Cocoa

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }

    @IBAction func RunNowButton(sender: NSButton) {
        import Foundation
        let task = NSTask()
        task.launchPath = "/usr/bin/osascript"
        task.arguments = ["~/Desktop/testscript.scpt"]

        task.launch()
    }

【问题讨论】:

  • 我对 Swift 了解不多,但我认为 import Foundation 需要移出课堂。你可以把它和import Cocoa一起放在顶部。

标签: swift button import scope declaration


【解决方案1】:

import 命令只能在“文件范围”中使用,如错误所示。文件范围意味着代码没有嵌套在任何其他代码中。在 Swift 中,这基本上意味着代码不能嵌套在任何大括号 ({}) 内。

让我们看一个简单的例子:

// Function declared at file scope:
func someFunction() {
    // Any code here is inside the scope of "someFunction"
    // import would not be allowed
}

// Class at file scope:
class MyClass {
    // Any code here is inside the scope of "MyClass"
    // import would not be allowed
}

// import at file scope (is valid)
import Foundation

在这种特定情况下,您实际上可以删除 import Foundation 行,因为 Foundation 会在您导入 Cocoa 时自动导入,而您已经在第一行执行此操作。

【讨论】:

  • 好吧,我删除了 import Foundation,但后来我得到了这种类型的错误。 osascript: ~/Desktop/testscript.scpt: 没有这样的文件或目录
  • @Mr.X 这意味着您的 Swift 代码运行正常,但 testscript.scpt 在您的桌面文件夹中不存在
  • 脚本确实存在并且在我的桌面上,但我仍然收到此错误。
  • @Mr.X 我不知道该告诉你什么。 osascript 清楚地告诉您它找不到该文件。也许尝试使用完整路径而不是使用“~”(也许您的应用程序在不同的用户下运行)。否则,请确保该命令在终端中有效。您的 swift 代码运行正常
  • 谢谢我已经解决了问题
【解决方案2】:

你不能在方法内部导入任何东西,所以移动行

import Foundation

在文件顶部。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2022-12-05
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多