Подтвердить что ты не робот

Не может индексировать значение [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

4b9b3361

Ответ 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 об этом.