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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

2回答

1611閲覧

最適な配列 or 辞書型を作成して、添付画像のようなtableViewを作成したい

uemuratt

総合スコア13

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/09/02 12:27

編集2016/09/02 18:35

下記のようなコードで、APIからjsonを取得し、それを配列に格納しました。

```SWIFT

var movieList: [[String: AnyObject]] = []

func sample() { Alamofire.request(.GET, "http://123456789").validate().responseJSON { response in switch response.result { case .Success: if let value = response.result.value { let json = JSON(value) for (key, _):(String, JSON) in json["movies"] { for (key2, _):(String, JSON) in json["movies"][key] { for (_, subJson3):(String, JSON) in json["movies"][key][key2] { let movieList: [String: AnyObject] = [ "id": subJson3["id"].int!, "title": subJson3["title"].string!, "published_year": subJson3["published_year"].string! ] self.movieList.append(movieList) } } } self.tableView.reloadData() } case .Failure: print("情報を取得できませんでした。") } } }
```JSON { "movies" : { "2015" : { "1" : [ { "id" : 111, "title" : "タイトル1", "published_year" : "2015", } ], "6" : [ { "id" : 222, "title" : "タイトル2", "published_year" : "2015", } ] }, "2008" : { "3" : [ { "id" : 333, "title" : "タイトル3", "published_year" : "2008", }, { "id" : 444, "title" : "タイトル4", "published_year" : "2008", } ], }, "2016" : { "1" : [ { "id" : 555, "title" : "タイトル5", "published_year" : "2016", }, { "id" : 666, "title" : "タイトル6", "published_year" : "2016", } ] } } }

movieListの配列データの中身

```ここに言語を入力

var movieList: [[String: AnyObject]] = [["id": 111, "title": タイトル1, "published_year" : 2015], ["id": 222, "title": タイトル2, "published_year" : 2015], ["id": 333, "title": タイトル3, "published_year" : 2008], ["id": 444, "title": タイトル4, "published_year" : 2008], ["id": 555, "title": タイトル5, "published_year" : 2016], ["id": 666, "title": タイトル6, "published_year" : 2016]]

このデータからtableViewを年ごとのsectionに分けて、titleをrowに格納することは可能でしょうか? 要するに下記の画像のようにしたいです。 ![イメージ説明](19fa006dfdc1e8eefa4f6ad2a1de008b.png) もしくは、下記のような辞書型を作った方が良いのでしょうか? ```ここに言語を入力 var movieList: [String: [String: AnyObject]] = [ 2015: [["id": 111, "title": タイトル1, "published_year" : 2015], ["id": 222, "title": タイトル2, "published_year" : 2015]], 2008: [["id": 333, "title": タイトル3, "published_year" : 2008], ["id": 444, "title": タイトル4, "published_year" : 2008]], 2016: [["id": 555, "title": タイトル5, "published_year" : 2016], ["id": 666, "title": タイトル6, "published_year" : 2016]] ]

どういった配列 or 辞書型を作れば、添付画像のようなtableViewを作成することができるのでしょうか。100年分くらいのデータがありますので、変数を100年分作成するのは避けたいと思っております。

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

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

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

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

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

guest

回答2

0

ベストアンサー

載せているJSONデータのフォーマットがちゃんとしていないようなので以下の様に変更したもので、取得できるプロジェクトを作ってみました、思っている実装と違うかもしれませんが試してみてください。

teratail_46556 サンプル
分からなところ等ありましたら、質問してください。
※ JSONパースにはライブラリ使ってません。

JSON

1{ 2 "movies" : { 3 "2015" : { 4 "1" : [ 5 { 6 "id" : 111, 7 "title" : "タイトル1", 8 "published_year" : "2015" 9 } 10 ], 11 "6" : [ 12 { 13 "id" : 222, 14 "title" : "タイトル2", 15 "published_year" : "2015" 16 } 17 ] 18 }, 19 "2008" : { 20 "3" : [ 21 { 22 "id" : 333, 23 "title" : "タイトル3", 24 "published_year" : "2008" 25 }, 26 { 27 "id" : 444, 28 "title" : "タイトル4", 29 "published_year" : "2008" 30 } 31 ] 32 }, 33 "2016" : { 34 "1" : [ 35 { 36 "id" : 555, 37 "title" : "タイトル5", 38 "published_year" : "2016" 39 }, 40 { 41 "id" : 666, 42 "title" : "タイトル6", 43 "published_year" : "2016" 44 } 45 ] 46 } 47 } 48 }

投稿2016/09/03 03:27

編集2016/09/03 03:30
_Kentarou

総合スコア8490

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

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

uemuratt

2016/09/14 05:17

ご返信大変ありがとうございます。 またご返信遅くなりましたことお詫びいたします。 お陰様で、ほぼ解決いたしました。ありがとうございます。 ただ1つ不明点がございます。 APIManagerクラスの中にクラスメソッドでdownLoadDataAPIというのがあり、その引数としてdownLoadTask(14行目)を指定しており、関数内でdownLoadTask(47行目)を実行しておりますがこれはどういったことでしょうか? 14行目のdownLoadTaskは引数で、47行目のdownLoadTaskは関数?? もしくは、関数内の引数の中で関数(downLoadTask)を実行しているということでしょうか? swift初心者でお恥ずかしい質問ですが、何卒よろしくお願いいたします。
guest

0

説明が少なく「添付画像のようなtableView」の意味がよくわかりませんが、
TableViewをセクションで分ける方法は、以下のサイトが参考になります。

【Swift】Table Viewの使い方。データを目次のように並べて選択できる入れ物。

投稿2016/09/02 15:36

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問