Не удается подписать значение типа '[AnyObject]?' с индексом типа 'UInt32'
Цель приведенного ниже кода - получить все объекты из класса parse.com с именем OnlineUsers
а затем найти случайный номер между 0
а также results.count
а затем использовать этот объект для чего-то.
Проблема в том, что когда я пытаюсь получить объект на месте results[randomNumber]
Я получаю ошибку ниже. Я получаю ту же ошибку, если я пытаюсь results[randomNumberCast]
ниже.
Как я могу решить эту проблему?
func findRandomOnlineUser() {
if PFUser.currentUser() != nil {
var user1 = PFUser.currentUser()
var user2 = PFUser()
//find user2, i.e. some user who is online right now
//Showing OnlineUsers only
let onlineUsersQuery = PFQuery(className: "OnlineUsers")
onlineUsersQuery.findObjectsInBackgroundWithBlock({ (results:[AnyObject]?, error:NSError?) -> Void in
if results!.count > 0 {
self.mLog.printToLog("launchChatwithRandomUser() -- There are more than zero objects in OnlineUsers")
//help: http://stackru.com/questions/26770730/apple-swift-placing-a-variable-inside-arc4random-uniform
let randomNumber = arc4random_uniform(UInt32(results!.count))
var randomNumberCast = Int(randomNumber)
if let userObject = results[randomNumberCast] {
user2 = userObject["user"] as! PFUser
} else {
//handle the case of 'self.objects' being 'nil'
}
} else {
//TODO: Show a prompt that user is not logged in and then take user to Login Screen
}
}
Сообщение об ошибке:
1 ответ
Решение
Дело в том, что results
кажется необязательным массивом: [AnyObject]?
, Поэтому, если вы хотите получить доступ к одному из его значений через индекс, вы должны сначала развернуть массив:
if let userObject: AnyObject = results?[randomNumberCast]