ios xcode swift parse.com xcode6.3

ios - ¿No se puede subindicar un valor de[AnyObject]? con un índice de tipo Int



xcode swift (5)

Esto está en una clase que extiende PFQueryTableViewController y recibo el siguiente error. Las filas serán solo PFUser .
¿Por qué no soy capaz de lanzarlo? ¿Hay alguna forma de evitar esto?

El error es:

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

... para esta línea:

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


¡Solo agrega un! (signo de exclamación) después de los objetos, así:

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

Eso lo solucionó para mí :)


El problema no es el elenco, sino el hecho de que self.objects parece ser una matriz opcional: ¿ [AnyObject]? .
Por lo tanto, si desea acceder a uno de sus valores a través de un subíndice, primero debe desenvolver la matriz:

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

self.objects?[indexPath.row] usa encadenamiento opcional para desenvolver primero self.objects , y luego llamarlo a su subíndice.

A partir de Swift 2, también podría usar la declaración de guardia :

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


Me encontré con el mismo problema y lo resolvió así:

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

Para su caso, puede hacer:

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


Mi solución sería ...

  1. Si está seguro de que la vista de tabla solo contendrá usuarios, intente convertir los objetos en Array of AnyObject a Matriz de PFUser. luego úsalo.

Tuve un problema similar con la siguiente línea:

array![row]

No pude entender de dónde vino el problema; si reemplacé la row con un número como 1 , compilé el código y lo ejecuté sin problemas.

Luego tuve la feliz idea de cambiarlo a esto:

array![Int(row)]

Y funcionó. Por mi vida, no entiendo por qué dar una matriz con un índice de -1 es teóricamente legal, pero ahí lo tienes. Para mí, tiene sentido que los subscritos no estén firmados, pero tal vez sea solo yo; Tendré que preguntarle a Chris sobre eso.