2015-11-16 15 views
11

Próbuję pobrać niektóre dane z treści JSON (w pliku data.swift) i przypisać je do "komentarzy ". Czy ktoś wie, co tu jest nie tak i jak mogę to naprawić? Wygląda na to, że mam problem z składnią, z którą mam problem.Nie można zasubskrybować wartości typu "[String: AnyObject]" z indeksem typu "String"

Błąd Dostaję: 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 
} 

To nie lubić comments = story["comments"] część.

Odpowiedz

22

Wystąpił błąd w kodzie, ale wyświetlany komunikat o błędzie jest niepoprawny i wprowadza w błąd z powodu błędu kompilatora Swift. Rzeczywisty komunikat o błędzie powinien brzmieć: AnyObject is not convertible to [String:AnyObject].

self.story["comments"] zwraca wartość AnyObject. Aby przypisać tę wartość do self.comments, musisz najpierw typecast AnyObject do słownika typu [String:AnyObject].

Na przykład:

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

Dzięki Darren. Zrobiłem to i po uruchomieniu go rozbił się i dał mi tę wiadomość: Nie można rzucić wartość typu "Swift._SwiftDeferredNSArray" (0x10716fff0) do "NSDictionary" (0x104b46d60). Wskazówki, jak postępować? – hkhan

+0

Błąd środowiska wykonawczego oznacza, że ​​'story [" comments "]' faktycznie zawiera tablicę, a nie słownik, którego się spodziewasz. Możesz użyć debuggera do ustawienia punktu przerwania i sprawdzić zawartość 'self.story' lub możesz wydrukować zawartość używając' NSLog ("% @", self.story) '. Lub możesz zadeklarować 'self.comments' jako tablicę zamiast słownika (i odpowiednio zmienić typografię). – Darren

0

Zgodnie z własną deklaracją, story to [String:AnyObject]. Oznacza to, że story["comments"] jest AnyObject. Ale comments jest AnyObject. Nie można przypisać obiektu AnyObject, w którym oczekuje się wartości [String:AnyObject].

Powiązane problemy