Невозможно подстроить значение типа '[String: AnyObject]' с индексом типа 'String'

Я пытаюсь получить некоторые данные из содержимого JSON (в моем файле data.swift) и назначить его "комментариям". Кто-нибудь знает, что здесь происходит, и как я могу это исправить? Кажется, проблема с синтаксисом, с которой у меня возникают проблемы.

Ошибка, которую я получаю: The error I am getting

import UIKit

class CommentsTableViewController: UITableViewController {

var story = [String:AnyObject]()
var comments = [String:AnyObject]()

override func viewDidLoad() {
    super.viewDidLoad()

    comments = story["comments"]

    tableView.estimatedRowHeight = 140
    tableView.rowHeight = UITableViewAutomaticDimension
}

Это не нравится comments = story["comments"].

Ответы

Ответ 1

В коде есть ошибка, но сообщение об ошибке, которое вы видите, неверно и вводит в заблуждение из-за ошибки компилятора Swift. Фактическое сообщение об ошибке должно быть прочитано: AnyObject is not convertible to [String:AnyObject].

self.story["comments"] возвращает AnyObject. Чтобы назначить это значение для self.comments вы должны сначала AnyObject в тип словаря [String:AnyObject].

Например:

self.comments = self.story["comments"] as! [String:AnyObject]

Ответ 2

Согласно вашей собственной декларации, story - это [String:AnyObject]. Это означает, что story["comments"] является AnyObject. Но comments - это [String:AnyObject], а не AnyObject. Вы не можете назначить AnyObject, где ожидается [String:AnyObject].