我有一个类+扩展名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)
}
}
答案 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)
}