Не может индексировать значение [AnyObject]? с индексом типа Int
Это класс, расширяющий 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]()
Ответы
Ответ 1
Проблема не в приведении, а в том, что 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, вы также можете использовать защитное выражение:
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
Ответ 2
Я столкнулся с той же проблемой и разрешил ее следующим образом:
let scope : String = searchBar.scopeButtonTitles![searchBar.selectedScopeButtonIndex] as! String
В вашем случае вы можете:
var user2 : PFUser = self.objects![indexPath.row] as! PFUser
Ответ 3
Мое обходное решение будет...
- Если вы уверены, что в tableview будут только пользователи, попробуйте придать объектам Array из AnyObject массив в PFUser. затем используйте его.
Ответ 4
Просто добавьте! (восклицательный знак) после объектов, например:
var user2 = self.objects![indexPath.row] as! PFUser
Это исправлено для меня:)
Ответ 5
У меня была аналогичная проблема со следующей строкой:
array![row]
Я не мог понять, откуда возникла проблема; если я заменил row
на число, подобное 1
, код скомпилирован и запущен без каких-либо проблем.
Тогда у меня была счастливая мысль изменить его на это:
array![Int(row)]
И это сработало. Для моей жизни я не понимаю, почему присвоение массива индексом -1
теоретически легально, но там вы идете. Для меня имеет смысл, чтобы индексы были неподписанными, но, возможно, это только я; Мне нужно спросить Chris об этом.