xcode 无法使用Int类型的索引为[AnyObject]?的值添加下标

uklbhaso  于 2022-12-14  发布在  其他
关注(0)|答案(5)|浏览(125)

这是在一个扩展PFQueryTableViewController的类中,我得到了以下错误。行将仅为PFUser
为什么我不能施展?有什么办法吗?
错误为:

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

...对于此行:

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

xqnpmsa8

xqnpmsa81#

问题不在于类型转换,而在于self.objects似乎是一个可选数组:因此,如果要通过下标访问它的某个值,必须首先展开数组:

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语句:

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
svgewumm

svgewumm2#

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

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

对于您的情况,您可以:

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

xcitsw883#

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

wsewodh2

wsewodh24#

只需在对象后添加一个!(感叹号),如下所示:

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

这就为我解决了问题:)

bqujaahr

bqujaahr5#

下面的代码行也有类似的问题:

array![row]

我不明白问题从何而来;如果我将row替换为1这样的数字,则代码编译和运行时不会出现任何问题。
然后我有一个快乐的想法改变它:

array![Int(row)]

我一直不明白为什么给一个数组一个-1的索引在理论上是法律的的,但是你看,对我来说,下标是无符号的是有道理的,但是也许只是我;我得问问Chris

相关问题