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
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
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
Mein Workaround wäre ..
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 :)
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 -1
ist 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.