À propos de "la Déclaration est valide uniquement à la portée du fichier"

j'ai un fichier d'extension de classe + swift. Après avoir ajouté un délégué que j'ai déclaré dans un autre fichier de la classe, le Xcode affiche "Declaration is only valid at file scope" à la ligne d'extension. Je ne sais pas quel est le problème.

quelqu'un Peut-il m'aider à résoudre ce problème?

class ListViewController: UIViewController, AddItemViewControllerDelegate {...}

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

}
40
demandé sur Nate Cook 2015-02-17 06:39:05

4 réponses

L'erreur est quelque part dans votre ... - qui d'erreur signifie que votre ListViewController classe n'a pas fermé, donc l'extension est interprété comme imbriquées à l'intérieur, comme ceci:

class ListViewController {
    ...
    extension ListViewController {
    }
}

trouvez le corset de fermeture manquant et vous devriez résoudre le problème.

76
répondu Nate Cook 2015-02-17 04:09:33

assurez-vous que l'extension est déclarée à la fin de votre classe principale et après la dernière accolades "}"

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

    }
14
répondu polarwar 2015-07-18 18:54:25

l'extension doit être au niveau de la racine - ne les intégrez pas dans une classe ou autre.

14
répondu Jordan 2016-02-08 07:23:29

assurez-vous que votre classe et votre extension sont séparées.

class ViewController: UIViewController {}

extension name: type {}
2
répondu Siddharth Prothia 2018-08-25 03:55:59