不能下标[AnyObject]的值?索引类型为Int

时间:2015-04-26 06:13:36

标签: ios xcode swift parse-platform xcode6.3

这是在扩展PFQueryTableViewController的类中,我收到以下错误。行仅为PFUser 我为什么不能施展它?有办法解决这个问题吗?

错误是:

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

...对于这一行:

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

enter image description here

5 个答案:

答案 0 :(得分:59)

问题不在于演员表,但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

答案 1 :(得分:5)

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

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

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

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

答案 2 :(得分:3)

我的解决方法是......

  1. 如果您确定tableview只包含用户,请尝试将对象Array of AnyObject类型转换为PFUser数组。然后使用它。

答案 3 :(得分:1)

只需添加一个!对象之后的(感叹号),如:

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

为我解决了这个问题:)

答案 4 :(得分:0)

我遇到了类似的问题:

array![row]

我无法理解问题的来源;如果我将row替换为1之类的数字,则代码编译并运行时没有任何问题。

然后我很乐意将其改为:

array![Int(row)]

它有效。对于我的生活,我不明白为什么给一个数组索引-1在理论上是合法的,但是你去了。对我来说,对于未签名的下标是有意义的,但也许它只是我;我不得不问Chris这件事。