关于 "Declaration is only valid at file scope"

About "Declaration is only valid at file scope"

我有一个 class 和扩展名 Swift 的文件。将我在另一个文件中声明的委托添加到 class 后,Xcode 显示此错误

Declaration is only valid at file scope

在延长线上。不知道是什么问题

谁能帮我解决一下?

class ListViewController: UIViewController, AddItemViewControllerDelegate {...}

extension ListViewController: UITableViewDataSource{
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
        performSegueWithIdentifier("ShowDetail", sender: indexPath)
    }

}

错误在你的 ... 中的某个地方——这个错误意味着你的 ListViewController class 没有关闭,所以扩展被解释为嵌套在里面,就像这样:

class ListViewController {
    ...
    extension ListViewController {
    }
}

找到丢失的右大括号,你应该解决问题。

确保在主 class 末尾和最后一个花括号“}”

之后声明扩展
class ListViewController: UIViewController, AddItemViewControllerDelegate {
   //Make sure that everything is clean here! 
}

extension ListViewController: UITableViewDataSource{
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
        performSegueWithIdentifier("ShowDetail", sender: indexPath)
    }
}

扩展名必须位于根级别 - 不要将它们嵌入到 class 或其他任何内容中。

确保您的 class 和扩展名是分开的。

class ViewController: UIViewController {}

extension name: type {}

我在我的文件底部有我的分机调用,然后将它们放在顶部,这为我修复了它。在底部,它们在 class 范围之外,所以我有点难过,只是试了一下。

扩展名应该在 Class 之外。

    class ListViewController: UIViewController, AddItemViewControllerDelegate {...}
    
    // Code...
    
    }
    
    extension ListViewController: UITableViewDataSource{
        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            tableView.deselectRowAtIndexPath(indexPath, animated: true)
            performSegueWithIdentifier("ShowDetail", sender: indexPath)
        }