2015-02-17 10 views
30

Ich habe eine Swift-Datei der Klasse + Erweiterung. Nach dem Hinzufügen eines Delegaten, den ich in einer anderen Datei der Klasse deklariert habe, zeigt der Xcode "Deklaration ist nur im Dateibereich gültig" in der Nebenstellenzeile an. Ich weiß nicht, was das Problem ist.Über "Deklaration ist nur im Dateibereich gültig"

Kann mir jemand helfen, es zu reparieren?

class ListViewController: UIViewController, AddItemViewControllerDelegate {...} 

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

} 
+0

Können Sie den Code anzeigen, der diesen Fehler verursacht? –

+0

@ 0x7fffffff ♦ Ja sicher – Dennis

+2

Nur für den Fall, stellen Sie sicher, dass Ihre Erweiterung außerhalb Ihrer Klasse ist! :) – jomafer

Antwort

66

Der Fehler ist irgendwo in Ihrem ... - dass Fehler bedeutet, dass Ihre ListViewController Klasse geschlossen nicht bekommen, so dass die Erweiterung interpretiert wird als innen verschachtelt, wie folgt aus:

class ListViewController { 
    ... 
    extension ListViewController { 
    } 
} 

Finden Sie die fehlende schließende Klammer und Sie sollten das Problem lösen.

+0

Danke für die Antwort. Ich habe meinen Code überprüft, die Klasse ist sicher geschlossen. Oder geht es um ein konformes Protokoll? – Dennis

+0

Oh, richtig - vielleicht ist die Fehlermeldung einfach schlecht. Diese Methode gehört eigentlich zu 'UITableViewDelegate'. Wenn Sie sich an 'UITableViewDataSource' halten wollen, benötigen Sie mindestens' tableView: numberOfRowsInSection: 'und' tableView: cellForRowAtIndexPath: '. –

+0

Danke! Es funktioniert gut. – Raja

12

Vergewissern Sie sich, dass die Erweiterung am Ende der Hauptklasse deklariert und nach den letzten geschweiften Klammern „}“

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

    } 
10

Die Erweiterung auf Root-Ebene sein muss - binde sich nicht in eine Klasse oder was auch immer.

Verwandte Themen