关于"声明仅在文件范围内有效"

时间:2015-02-17 03:39:06

标签: ios swift delegates

我有一个类+扩展名swift文件。将我在另一个文件中声明的委托添加到类后,Xcode在扩展行显示“声明仅在文件范围内有效”。我不知道问题是什么。

有人可以帮我解决吗?

class ListViewController: UIViewController, AddItemViewControllerDelegate {...}

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

}

6 个答案:

答案 0 :(得分:87)

错误位于...中 - 该错误意味着您的ListViewController类没有关闭,因此扩展名被解释为嵌套在内部,如下所示:

class ListViewController {
    ...
    extension ListViewController {
    }
}

找到缺少的右括号,你应该解决问题。

答案 1 :(得分:15)

确保扩展名在主类末尾和最后一个大括号之后声明"}"

     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)
        }

    }

答案 2 :(得分:15)

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

答案 3 :(得分:4)

确保您的班级和扩展名分开。

class ViewController: UIViewController {}

extension name: type {}

答案 4 :(得分:0)

我的扩展程序调用位于文件的底部,并将其放在顶部,并为我解决了该问题。在底部,它们不在课程范围之内,所以我有些困惑,只是尝试了一下。

答案 5 :(得分:0)

扩展名应该不在类之内。

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