2015-11-16 8 views
11

JSONコンテンツ(data.swiftファイル内)からデータを取得しようとしています。 "誰でもここで間違っていることを知っていて、どうすればそれを修正できますか?私が問題を抱えているという構文上の問題のようです。'[String:AnyObject]'型の値に 'String'型のインデックスを添字できません

エラー私は取得しています: 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"]一部を好きではないです。

答えて

22

コードにエラーがありますが、表示されているエラーメッセージはSwiftコンパイラのバグのために間違っており、誤解を招きます。実際のエラーメッセージは、AnyObject is not convertible to [String:AnyObject]となります。

self.story["comments"]は、AnyObjectを返します。その値をself.commentsに割り当てるには、まずにAnyObjectをタイプキャストする必要があります。例えば

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

おかげダレン。私はそれを実行した後、クラッシュし、このメッセージをくれました: 'Swift._SwiftDeferredNSArray'(0x10716fff0)の値を 'NSDictionary'(0x104b46d60)にキャストできませんでした。進める方法のヒント? – hkhan

+0

ランタイムエラーは、 'story [" comments "]'に実際に期待している辞書ではなく配列が含まれていることを意味します。デバッガを使用してブレークポイントを設定し、 'self.story'の内容を検査することも、' NSLog( "%@"、self.story) 'を使って内容を出力することもできます。あるいは、辞書の代わりに 'self.comments'を配列として宣言して(それに応じて型キャストを変更することもできます) – Darren

0

自分の宣言によれば、story[String:AnyObject]です。つまり、story["comments"]はAnyObjectです。しかし、commentsは、[String:AnyObject],ではなく、 AnyObjectです。 AnyObjectを割り当てることはできません。[String:AnyObject]が必要です。

関連する問題