2016-05-31 6 views
0

にネストされた辞書を行う方法。スウィフトへの初心者は、私も単純なことで苦労していたよう:(私は辞書内の辞書を作成するために非常に多くの方法で試みたが、それは常に失敗しスウィフト

理由は、私は10項目の表を記入したいと思っています。各項目には、タイトル、URL、ページビュー、ユニークユーザーがあります。 IndexPath.rowを使用して、私はデータをJSON形式のコンテンツを持つAPIからの入力に基づいて、すべての第五秒を更新できるようにしたい

を私が遊び場にしようとしてしまった:。

var topArticleDetails:[String:AnyObject] = ["title":"","url":"","uniqueUsers":0,"events":0] 
var topArticles:[Int:NSDictionary] = [0:topArticleDetails] 

topArticleDetails["title"] = "Varden - Nyheter" 
topArticleDetails["url"] = "http://www.varden.no/nyheter" 
topArticleDetails["uniqueUsers"] = 50 
topArticleDetails["events"] = 100 

topArticles[1] = topArticleDetails 

は、正常に動作するようですが、私は私のViewControllerにこれを追加したとき、私は、エラーインスタンスのメンバを取得しています「topArticleDetails」「のViewController」

閉じるが、無葉巻タイプに使用することはできません。..

どうすればこの問題を解決できますか?多分私が今試しているものより良い方法があります。現時点ではちょっと働いていますが、代わりに、ネストされた辞書を有していると私はこのような4つの別々の配列になってしまっている:

var topArticlesTitle = [String]() 
var topArticlesURL = [String]() 
var topArticlesEvents = [Int]() 
var topArticlesUniqueUsers = [Int]() 

と私はより良い方法がなければならないかなり確信しています。私の下に設けられソリューションに加えて

>> UPDATE < <

は別のものを見つけました。それはとても簡単ですが、私は恥ずかしいですが、それは同時にSwiftとOOPの両方を学ぶ部分だと思います。データを削除した場合、変数を宣言するときに変数に入力しようとしましたが、空のままにしておくと、魅力的に機能しました。代わりに、辞書内の辞書を使用しての

var topArticleDetails = [String:AnyObject]() 
var topArticles = [Int:NSDictionary]() 
+0

これは、View Controllerでどのように使用しているかを確認すると役立ちます。 –

+0

@CaseyFleserありがとうございますが、私はそれを理解する助けを得たように今は大丈夫だと思いますか? – espenlg

答えて

1

、あなたが使用することができますし、例えばstruct配列、:

struct Article { 
    var title: String? 
    var url: String? 
    var: events: Int? 
    var uniqueUsers: Int? 
} 

var topArticles = [Article]() 

それはに簡単になりますので、辞書内の辞書よりもmantainする方が簡単です。モデルを変更してください。ネストされた辞書についての質問に答えるために

+1

私は、実際に構造体を使うべきであるときに、配列、タプル、辞書を乱用する人が多いことに気付きました。 – Alexander

+0

構造です!私はまだその章に達していない:)しかし、私を助けてくれてありがとう! – espenlg

0

あなたは、このようにそれらを宣言することができます(辞書を乱用ではないため、構造体は良い仕事けれども、私はpableirosの答えとなるだろう):JSONを変換するには

var test = [Int: [String: AnyObject]]() 

は、使用することができますNSJSONSerializationクラス:

try NSJSONSerialization.JSONObjectWithData(your_encoded_json, options: []) as! [Int: [String: AnyObject]] 
+0

ありがとう@ブリムストーン! – espenlg

関連する問題