webentwicklung-frage-antwort-db.com.de

Kann einen Wert von [AnyObject] nicht subskribieren? mit einem Index vom Typ Int

Dies ist in einer Klasse, die erweitert PFQueryTableViewController und ich erhalte den folgenden Fehler. Die Zeilen sind nur PFUser.
Warum kann ich es nicht wirken? Gibt es einen Weg, dies zu umgehen?

Der Fehler ist:

Cannot subscript a value of [AnyObject]? with an index of type Int

... für diese Zeile:

var user2 = self.objects[indexPath.row] as! PFUser

enter image description here

25
user1406716

Das Problem ist nicht die Besetzung, sondern die Tatsache, dass self.objects scheint ein optionales Array zu sein: [AnyObject]?.
Wenn Sie daher über einen Index auf einen seiner Werte zugreifen möchten, müssen Sie zuerst das Array auspacken:

var user2: PFUser
if let userObject = self.objects?[indexPath.row] {
    user2 = userObject as! PFUser
} else {
    // Handle the case of `self.objects` being `nil`.
}

Der Ausdruck self.objects?[indexPath.row] verwendet optionale Verkettung , um self.objects, und rufen Sie dann seinen Index auf.


Ab Swift 2 können Sie auch die guard-Anweisung verwenden:

var user2: PFUser
guard let userObject = self.objects?[indexPath.row] else {
    // Handle the case of `self.objects` being `nil` and exit the current scope.
}
user2 = userObject as! PFUser
61
Marcus Rossel

Ich bin auf dasselbe Problem gestoßen und habe es folgendermaßen gelöst:

let scope : String = searchBar.scopeButtonTitles![searchBar.selectedScopeButtonIndex] as! String

Für Ihren Fall könnten Sie Folgendes tun:

var user2 : PFUser = self.objects![indexPath.row] as! PFUser
6
rudenudedude

Mein Workaround wäre ..

  1. Wenn Sie sicher sind, dass die Tabellenansicht nur Benutzer enthält, versuchen Sie, die Objekte Array von AnyObject in Array von PFUser zu typisieren. dann benutze es.
3
Amit89

Fügen Sie einfach ein! (Ausrufezeichen) nach Objekten wie folgt:

var user2 = self.objects![indexPath.row] as! PFUser

Das hat es für mich behoben :)

1
ojassethi

Ich hatte ein ähnliches Problem mit der folgenden Zeile:

array![row]

Ich konnte nicht verstehen, woher das Problem kam; wenn ich row durch eine Zahl wie 1 Der Code wurde kompiliert und ohne Probleme ausgeführt.

Dann hatte ich den glücklichen Gedanken, dies zu ändern:

array![Int(row)]

Und es hat funktioniert. Ich verstehe nicht, warum ich einem Array einen Index von -1ist theoretisch legal, aber los geht's. Für mich ist es sinnvoll, dass die Indizes nicht signiert sind, aber vielleicht bin es nur ich; Ich muss Chris danach fragen.

0
dinesharjani