不能下标的值? 具有typesInt的索引

这是在扩展PFQueryTableViewController的类中,我收到以下错误。 行将只是PFUser
为什么我无法施展它? 有没有解决的办法?

错误是:

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

…这一行:

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

在这里输入图像说明

问题不是cast,而是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]使用可选的链接首先打开self.objects ,然后调用它的下标。


从Swift 2开始,你也可以使用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 

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

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

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

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

我的解决方法是..

  1. 如果您确定tableview将只包含用户,则尝试将AnyObject的Array对象转换为PFUser的Array。 然后使用它。

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

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

为我修好了:)

我有一个类似的问题,与以下行:

 array![row] 

我不明白这个问题来自哪里, 如果我用像1这样的数字replacerow ,代码编译和运行没有任何问题。

然后,我有一个快乐的想法改变它:

 array![Int(row)] 

它的工作。 对于我的生活,我不明白为什么给一个数组-1指数在理论上是合法的,但你去。 下标是无符号的,对我来说是有道理的,但也许只是我而已。 我得问问Chris 。