C'est dans une classe étendant PFQueryTableViewController et j'obtiens l'erreur suivante. Les lignes seront uniquement PFUser
.
Pourquoi ne puis-je pas le lancer? Y a-t-il un moyen de contourner ceci?
L'erreur est:
Cannot subscript a value of [AnyObject]? with an index of type Int
... pour cette ligne:
var user2 = self.objects[indexPath.row] as! PFUser
Le problème n'est pas le casting, mais le fait que self.objects
semble être un tableau facultatif: [AnyObject]?
.
Par conséquent, si vous souhaitez accéder à l'une de ses valeurs via un indice, vous devez d'abord déballer le tableau:
var user2: PFUser
if let userObject = self.objects?[indexPath.row] {
user2 = userObject as! PFUser
} else {
// Handle the case of `self.objects` being `nil`.
}
L'expression self.objects?[indexPath.row]
utilise chaînage facultatif pour déballer d'abord self.objects
, puis appelez son indice.
À partir de Swift 2, vous pouvez également utiliser la instruction guard :
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
J'ai rencontré le même problème et l'ai résolu comme ceci:
let scope : String = searchBar.scopeButtonTitles![searchBar.selectedScopeButtonIndex] as! String
Pour votre cas, vous pourriez faire:
var user2 : PFUser = self.objects![indexPath.row] as! PFUser
Ma solution de contournement serait ..
Ajoutez simplement un! (point d'exclamation) après les objets, comme ceci:
var user2 = self.objects![indexPath.row] as! PFUser
Cela m'a corrigé :)
J'ai eu un problème similaire avec la ligne suivante:
array![row]
Je ne pouvais pas comprendre d'où venait le problème; si j'ai remplacé row
par un nombre comme 1
le code compilé et exécuté sans aucun problème.
Ensuite, j'ai eu la pensée heureuse de le changer en ceci:
array![Int(row)]
Et ça a marché. Pour ma vie, je ne comprends pas pourquoi donner à un tableau un indice de -1
est théoriquement légal, mais voilà. Il est logique pour moi que les indices ne soient pas signés, mais c'est peut-être juste moi; Je vais devoir demander Chris à ce sujet.