无法下标 [AnyObject] 的值?具有 Int 类型的索引

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

这是在 class 扩展 PFQueryTableViewController 中,我收到以下错误。这些行将只有 PFUser
为什么我不能施放它?有解决办法吗?

错误是:

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

...对于此行:

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

我的解决方法是..

  1. 如果您确定该表视图将仅包含用户,请尝试将对象 Array of AnyObject 类型转换为 Array of PFUser。然后使用它。

问题不在于转换,而是 self.objects 似乎是一个可选数组这一事实:[AnyObject]?.
因此,如果你想通过下标访问其中一个值,你必须先解包数组:

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]使用optional chaining先展开self.objects,然后调用它的下标


从 Swift 2 开始,您还可以使用 guard statement:

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

我 运行 遇到了同样的问题并解决了这个问题:

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

对于你的情况,你可以这样做:

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

只需添加一个! (感叹号)在对象之后,像这样:

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

帮我修好了 :)

我在以下行中遇到了类似的问题:

array![row]

我不明白问题出在哪里;如果我将 row 替换为 1 之类的数字,则编译的代码和 运行 没有任何问题。

然后灵机一动想改成这样:

array![Int(row)]

它奏效了。对于我的生活,我不明白为什么给数组一个 -1 的索引在理论上是合法的,但你去吧。下标无符号对我来说很有意义,但也许只有我一个人;我得问问 Chris