Не удается подписать значение [AnyObject]? с индексом типа Int

Это класс, расширяющий PFQueryTableViewController, и я получаю следующее ошибка. Строки будут только PFUser.
Почему я не могу применить его? Есть ли способ обойти это?

Ошибка:

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

... для этой строки:

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

введите здесь описание изображения


person user1406716    schedule 26.04.2015    source источник


Ответы (5)


Проблема не в приведении, а в том, что 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
person Marcus Rossel    schedule 26.04.2015

Я столкнулся с той же проблемой и решил ее следующим образом:

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

Для вашего случая вы можете сделать:

var user2 : PFUser = self.objects![indexPath.row] as! PFUser
person rudenudedude    schedule 14.05.2015

Мой обходной путь был бы..

  1. Если вы уверены, что табличное представление будет содержать только пользователей, попробуйте привести объекты Array of AnyObject к Array of PFUser. затем используйте его.
person Amit89    schedule 26.04.2015
comment
это все еще дает ошибку, но это работает, не знаю почему: var user2 = self.objects![indexPath.row] as! PFUser - person user1406716; 26.04.2015
comment
Поскольку массив объектов является необязательным [AnyObject]? - person Amit89; 26.04.2015

Просто добавьте ! (восклицательный знак) после объектов, например:

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

Это исправило это для меня :)

person ojassethi    schedule 16.12.2015

У меня была аналогичная проблема со следующей строкой:

array![row]

Я не мог понять, откуда взялась проблема; если я заменю row числом вроде 1, код скомпилируется и запустится без проблем.

Тогда мне пришла в голову счастливая мысль изменить его на это:

array![Int(row)]

И это сработало. Хоть убей, я не понимаю, почему присвоение массиву индекса -1 теоретически допустимо, но вот так. Для меня имеет смысл, чтобы индексы не были подписаны, но, может быть, это только я; Мне придется спросить об этом Криса.

person dinesharjani    schedule 22.05.2017