質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

935閲覧

swiftUI, 辞書の中に辞書があるときの書き方と取り出し方がわからない

yasumaro

総合スコア67

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/05/17 15:38

編集2020/05/17 15:41

多次元dictionayの取り出し方がわかりません。

辞書の取り出し方はこののサイトのように

var companies = ["AAPL" : "Apple Inc", "GOOG" : "Google Inc", "AMZN" : "Amazon.com, Inc", "FB" : "Facebook Inc"] for (key, value) in companies { println("(key) -> (value)") }

で取り出すことができるのはわかりましたが下記の場合どのようにすれば全て取れるでしょうか?

class Hoge { //型はこんな感じで宣言したのですがあっていますか? var products = [String: [String:Any] ]() //以下省略 } ーーーーーーーーーーーーーーーーーーーーー products["productId":["name":"apple","imageUrl":"http//hogehoge","quwantity":3]] products["productId2":["name":"orange","imageUrl":"http//FUGAFUGA","quwantity":1]] このように入ったものを forEachのように取り出して表示したいです。 Listに1つのプロダクトIDごとに画像 名前 量を表したいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

タグがSwiftUIなのですが、本質的にはSwiftの話だと思うので、そのように解釈してお話します。
Listで複数のビューを作る場合については、別途お考えください)

辞書の value が辞書の場合は、その value を辞書として再度加工すればいいと思います。

swift

1import UIKit 2 3var products = [String: [String: Any]]() 4 5products["productId"] = ["name":"apple","imageUrl":"http//hogehoge","quwantity":3] 6products["productId2"] = ["name":"orange","imageUrl":"http//FUGAFUGA","quwantity":1] 7 8for (key, value) in products { 9 print("product name: ", key) 10 11 value.forEach { print(" key: ($0.key), value: ($0.value)" ) } 12 // これと同じ 13// for (key2, value2) in value { 14// print(" key: (key2), value: (value2)") 15// } 16}

for-in でも同じ処理はかけますし、処理の内容によってはfor-inの方が好ましいケースもあるようです。

ただ、辞書は扱いが厄介なことも多いので、データは構造体(の配列)などでもたせた方が扱いやすいかもしれません。

投稿2020/05/18 05:55

編集2020/05/18 05:56
TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yasumaro

2020/05/18 12:41

TsukubaDepotsさんありがとうございます。 取り出しかたは理解できました。 swiftUIで var body: some View { }を持つviewのクラスで 2次元ディクショナリーで値を保持しているプロパティは List{ } ないで取り出すことはできないでしょうか? モデルでDBから取得しビューモデル経て2次元ディクショナリのプロパティをviewで保持しているのですが。viewないでforが使えないので悩んでいます。 (データの保持の仕方が悪いのでおっしゃる通り構造体の配列に書き換えようとも検討中です)
TsukubaDepot

2020/05/18 13:08

コメントいただいたのに申し訳ないのですが、SwiftUI の作法はよく理解していないので、適切なお答えができません(構文上の制約が多いのは理解しているのですが)。 もちろん、一連のコードとしてどのように記述するのかによって可能か不可能か判断することになると思いますが、コードをある程度提示して頂かない限り、他の方からもコメントしづらいのではないかという印象はありますので、エラーが出たとしてもご自身である程度コードを書いていただいた上で、新たにご質問いただいた方がいいかもしれません。
yasumaro

2020/05/18 13:23

ご指摘ありがとうございます。 >自身である程度コードを書いていただいた上で、新たにご質問いただいた方がいいかもしれません。 そうしようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問