Как устранить ошибку «неоднозначная ссылка на элемент ‘нижний индекс'»

#swift #dictionary #swift3

#swift #словарь #swift3

Вопрос:

Я получаю сообщение об ошибке:

Неоднозначная ссылка на элемент ‘нижний индекс’

В следующем коде:

 let jsonObject = try JSONSerialization.jsonObject(with: data, options: [])
guard   let jsonDictionary = jsonObject as? [NSObject: AnyObject], 
        let photos = jsonDictionary["photos"] as? [String: AnyObject], // this line is giving the error
        let photosArray = photos["photo"] as [[String: AnyObject]] else {
 print("Error")
}
 

В предыдущих сообщениях предлагалось изменить тип с [String: AnyObject] на [AnyObjectHashable: Any] . Это не устранило ошибку. Может кто-нибудь объяснить, почему возникает эта ошибка и как ее можно устранить?

Ответ №1:

Вы можете заменить это, для создания словаря в swift 3 вы можете использовать like [String: Any] вместо [String: AnyObject]

 let jsonObject = try JSONSerialization.jsonObject(with: data, options: [])
guard   let jsonDictionary = jsonObject as? [String: Any],
    let photos = jsonDictionary["photos"] as? [String: AnyObject], // this line is giving the error
    let photosArray = photos["photo"] as? [[String: Any]] else {
        print("Error")
}
print(jsonDictionary)
 

Комментарии:

1. Спасибо. Я изменил все на Any и AnyHashable.

2. @grabury В своем вопросе вы сказали, что пробовали именно это, и это не сработало. Что заставило его работать сейчас?

3. @HAS ошибка была в этой конкретной строке, поэтому я изменил только эту строку. Затем я изменил все вхождения на AnyHashable и Any

4. С этого момента лучше использовать Any, чем AnyObject