无法下标 [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
我的解决方法是..
- 如果您确定该表视图将仅包含用户,请尝试将对象 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。
这是在 class 扩展 PFQueryTableViewController 中,我收到以下错误。这些行将只有 PFUser
。
为什么我不能施放它?有解决办法吗?
错误是:
Cannot subscript a value of [AnyObject]? with an index of type Int
...对于此行:
var user2 = self.objects[indexPath.row] as! PFUser
我的解决方法是..
- 如果您确定该表视图将仅包含用户,请尝试将对象 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。