2015-11-16 25 views
11

Sto cercando di ottenere alcuni dati da un contenuto JSON (nel mio file data.swift) e assegnarlo a "commenti" ". Qualcuno sa cosa sta andando male qui e come posso risolvere il problema? Sembra un problema di sintassi con cui ho problemi.Can not subscript un valore di tipo '[String: AnyObject]' con un indice di tipo 'String'

L'errore che sto ottenendo: 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 
} 

Non è gradire la parte comments = story["comments"].

risposta

22

C'è un errore nel codice, ma il messaggio di errore che stai vedendo è errato e fuorviante a causa di un bug del compilatore Swift. Il messaggio di errore effettivo dovrebbe essere: AnyObject is not convertible to [String:AnyObject].

self.story["comments"] restituisce un AnyObject. Per assegnare tale valore a self.comments devi prima digitare il typ AnyObject al tipo di dizionario [String:AnyObject].

Ad esempio:

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

Grazie Darren. Ho fatto così e dopo averlo eseguito si è bloccato e mi ha dato questo messaggio: Impossibile trasmettere il valore di tipo 'Swift._SwiftDeferredNSArray' (0x10716fff0) a 'NSDictionary' (0x104b46d60). Consigli su come procedere? – hkhan

+0

L'errore di runtime significa che 'story [" comments "]' contiene effettivamente una matrice piuttosto che il dizionario che si aspetta. È possibile utilizzare il debugger per impostare un punto di interruzione e ispezionare il contenuto di 'self.story', oppure è possibile stampare il contenuto utilizzando' NSLog ("% @", self.story) '. Oppure, puoi dichiarare 'self.comments' come una matrice invece di un dizionario (e modificare di conseguenza il typecast). – Darren

0

In base alla propria dichiarazione, story è un [String:AnyObject]. Ciò significa che story["comments"] è un oggetto AnyObject. Ma comments è un [String:AnyObject], non un oggetto AnyObject. Non è possibile assegnare un oggetto AnyObject in cui è previsto uno [String:AnyObject].

Problemi correlati