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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

2回答

1861閲覧

Swift3 Switch文のfallthroughについて

P-san

総合スコア21

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

1グッド

0クリップ

投稿2016/10/17 04:38

###前提・実現したいこと
Swift3にて条件判定について悩んでいます。

二次元配列の指定要素が空だった場合、その場所に文字列"データなし"を入れようと思います。

switch文で判定しようと思い、以下のように書きました。

fallthroughを使えば全部の条件判定ができると思ったのですが、
こちらは条件に関係なくfallthrough以下を実行してしまうようです。
このやり方は間違っているのでしょうか?

求めている結果を出すにはどのようにしたらいいでしょうか?

よろしくお願いします。

###該当のソースコード

// 略 var array = [["りんご"] , [] , [] , ["バナナ"]] switch array { // それぞれの場所を判定 case _ where mainTableViewList[0].isEmpty: print("case1") mainTableViewList[0].append("データなし") fallthrough case _ where mainTableViewList[1].isEmpty: print("case2") mainTableViewList[1].append("データなし") fallthrough case _ where mainTableViewList[2].isEmpty: print("case3") mainTableViewList[2].append("データなし") fallthrough case _ where mainTableViewList[3].isEmpty: print("case4") mainTableViewList[3].append("データなし") default: print("データ全部あり") } // 略

###結果
現在の結果
[["りんご"] , ["データなし"] , ["データなし"] , ["バナナ" ,"データなし"]]

求めている結果
[["りんご"] , ["データなし"] , ["データなし"] , ["バナナ"]]

fuzzball👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

fuzzballさんと同じですがこの場合は以下のように完結にかけるのでその方が良いと思います。
※ fuzzballさんのはもっと簡略化した書き方です。

swift

1var array = [["りんご"] , [] , [] , ["バナナ"]] 2 3let result = array.map { (value) -> Array<String> in 4 return value.isEmpty ? ["データなし"] : value 5} 6 7result 8//=> [["りんご"], ["データなし"], ["データなし"], ["バナナ"]]

投稿2016/10/17 10:27

編集2016/10/17 10:31
_Kentarou

総合スコア8490

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

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

P-san

2016/10/18 06:46

みなさん、ありがとうございました。 新しいやり方を知ることができました。
guest

0

fallthroughは、条件に関係なく次のブロックを実行します。

Program execution continues to the next case even if the patterns of the case label do not match the value of the switch statement’s control expression.

Appleのリファレンス、強調は引用者)

何度も繰り返し判定させたいなら、ふつうにif文を連ねるのがいいでしょう。

投稿2016/10/17 04:53

maisumakun

総合スコア145183

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

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

fuzzball

2016/10/17 06:42

今回の件に関して言えば、ループを回した方が効率的ですね。 array = array.map {$0.isEmpty ? ["データなし"] : $0}
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問