2017-04-15 5 views
0

私は私のファイルはSwift3にconveted持っていた、1つの辞書は、私が過去に完璧に動作しますが、今日はそれがSwift3、AnyObjectを辞書に追加するには?

コンテキストタイプを思い出し

var Detail: [String:[String:AnyObject]] = [ 
     "0":["0":["number":0,"imageName":"40"]], 
     "1":["0":["number":1,"imageName":"3setting"],"1":["number":1,"imageName":"3private"],"2":["number":1,"imageName":"3currency"]], 
     "2":["0":["number":1,"imageName":"3favourite"],"1":["number":1,"imageName":"3favourite"]], 
     "3":["0":["number":1],"1":["number":1]], 
     ] 

のようだったが「ANYOBJECT」辞書リテラル

で使用することはできません

なぜ今は動作しませんか? なぜこれはかわいいとそれを解決する方法は?

+0

内部辞書に静的なキーがある場合は、それらを代わりに 'struct'sとしてモデル化する必要があります。また、あなたの外側の辞書のキーが整数にしかならない場合は、代わりにそれらを 'Int'にしてください。もしそれらが連続していれば、代わりに配列を使う方が良いでしょう。全体的には、おそらく '[[SomeStruct]]'が必要です。 – Hamish

答えて

3

[String:AnyObject]の代わりに[String:Any]と書いても問題ありません。

「何が起こったのか」:自動ブリッジが解除されました(たとえば、IntとNSNumber、またはStringとNSStringの間)。したがって、["imageName":"3setting"]のようなリテラル辞書は[String:String]と推定され、[String:AnyObject]が期待される場所には割り当てられません。つまり、文字列はではなく、 AnyObjectです。しかし、すべてはAnyであるため、Stringは確かにAnyです。

あなたは、代わりに(のNSNumberまたはNSStringの ANYOBJECTであるため)["number":1 as NSNumber, "imageName":"3setting" as NSString]を書き込むことによってこの問題を回避できますが、少しのポイントはここにあることをやってであるようです。一般的なケースでは、辞書は現在[AnyHashable:Any]であり、これをキャッチオール型として使用する必要があります。 AnyObjectは基本的にはゆっくりとしかし確実に遠ざかります。

+0

ありがとうございます!できます –

関連する問題