Swift: ошибка «Значение типа« Любой »не имеет индексов» ошибка / swift 5 - PullRequest
0 голосов
/ 04 июня 2019

Следующий код покажет, что «Значение типа« Любой »не имеет индексов»

if let postDictionary = jsonDictionary["post"] as? [String: AnyObject]
class FeedController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
    var posts = [Post]()

    override func viewDidLoad() {
        super.viewDidLoad()

        if let path = Bundle.main.path(forResource: "single_post", ofType: "json") {
            do {
                let data = try(NSData(contentsOfFile: path, options: NSData.ReadingOptions.mappedIfSafe))

                let jsonDictionary = try(JSONSerialization.jsonObject(with: data as Data, options: .mutableContainers))

                if let postDictionary = jsonDictionary["post"] as? [String: AnyObject] {
                    let post = Post()
                post.setValuesForKeysWithDictionary(postDictionary)
                    self.posts = [post]
                }

                print(jsonDictionary)
            } catch let err {
                print(err)
            }
        }

1 Ответ

0 голосов
/ 04 июня 2019

jsonObject(with:options:) возвращает Any.

Сначала необходимо привести его к типу [String: AnyObject].

Изменить:

if let postDictionary = jsonDictionary["post"] as? [String: AnyObject]

Кому:

if let dictionary = jsonDictionary as? [String: AnyObject], let postDictionary = dictionary["post"] as? [String: AnyObject]

Документы: https://developer.apple.com/documentation/foundation/jsonserialization/1415493-jsonobject

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...