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

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

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

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

Q&A

解決済

1回答

1384閲覧

2次元配列[[String]]にsectionを増やすために、空の要素[]を追加すると[""]となり空白のセルができてしまうことを避けたい。

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2018/08/04 12:36

編集2018/08/04 15:09

2次元配列をもとにセクション付きのUITableViewを表示しているのですが、
セクションのみ増やす場合に2次元配列にappend.([])・セクション名称の配列にappend(newSectionName)すると、しばらくして追加した[][""]となってしまい、名称が空白のセルができてしまいます。
空白のセルが作成されることを避ける方法があるでしょうか?

swift

1// 配列 2var dataArray: [[String]] = [["A01","A02"],["B01","B02"]] 3var sectionNameArray: [String] = ["sectionA","sectionB"]

↓セクションだけ増やしたいので空の配列とセクション名を追加する

swift

1dataArray.append([]) 2sectionNameArray.append("sectionC") 3// => dataArray = [["A01","A02"],["B01","B02"],[]] 4// => sectionNameArray = ["sectionA","sectionB","sectionC"]

↓しばらくすると(タイミングが何か分からない。)、[][""]になり、numberOfRowsInSectionで""がカウントされ、空のCellができてしまう。 

swift

1dataArray = [["A01","A02"],["B01","B02"],[]] 2// ↑の[]が自動的に↓の[""]になる。 3dataArray = [["A01","A02"],["B01","B02"],[""]] 4

numberOfRowsInSectionだけならば↓のように回避できるのですが、並び替えなどもするので良い解決方法はないでしょうか?

swift

1//numberOfCell 2func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 3 if dataarray[section] == [""] { 4 return 0 5 } else { 6 return dataArray[section].count 7 } 8} 9 10// 並び替えをすると、空白のセルができてしまう。 11dataArray = [["A02"],["B01","B02"],["","A01"]]

追記:問題が起こる原因と解決

配列に変更が加えられるたびにデータをCSV形式で保存していたため、CSVからデータを読み込む際に[]が[""]になったようです。
解決は、xAxisさんに回答いただいたように、CSVからのデータ読み込み時に""を取り除いたところ、問題なく動くようになりました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

原因よくわからないけどとりあえずfilterして除外しちゃうとか。

swift

1let array = dataArray.map{$0.filter{$0 != ""}} 2print(array) //[["A02"], ["B01", "B02"], ["A01"]]

投稿2018/08/04 13:16

xAxis

総合スコア1349

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

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

退会済みユーザー

退会済みユーザー

2018/08/04 15:12 編集

回答ありがとうございます。 並び替え・保存・などなど、都度都度に除外するようにするしかないのかな。と思ったのですが。 配列に変更が加えられるタイミングを考えてみたら、永続化のためにちょくちょくCSVに保存してるのでそれを読み込むタイミングで[]が[""]になってるような気が…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問