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

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

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

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

Q&A

解決済

3回答

696閲覧

switch文の中で処理内容が重複している時の上手な書き方

yoshiSwift

総合スコア34

Swift

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

0グッド

0クリップ

投稿2019/06/25 04:20

swiftのswitch文で処理内容が重複している時、上手なコードの書き方があれば教えていただきたいです。また、最下部の「理想のコード」のような書き方はできますでしょうか。よろしくお願い致します。

具体的には、UIButtonを以下の順番で配置していこうと考えています。
① 左上(処理A)
② ①の右(処理B)
③ ①の下(処理C)
④ ③の右(処理D)

UIbuttonを複数個作る際は、①で作成されたUIButtonを基準に配置したいと思っています。

//現在のコード //UIbuttonを作る個数 var number = 4 switch number { case 1: 処理A case 2: 処理A + 処理B case 3: 処理A + 処理B + 処理C case 4: 処理A + 処理B + 処理C + 処理D default: }

理想のコード

//UIbuttonを作る個数 var number = 4 switch number { case 1: 処理A case 2: case 1の処理 + 処理B case 3: case 2の処理 + 処理C case 4: case 3の処理 + 処理D default: }

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

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

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

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

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

fuzzball

2019/06/25 04:28

左上とか右とかは表示位置のことですか?
fuzzball

2019/06/25 04:52

とりあえずswitchはやめた方がいいかと。4つの違いは表示位置だけなんでしょうか?
yoshiSwift

2019/06/25 07:05

違いは表示位置と、titleです。 イメージは、 titleに使うための配列:[String] = ["あ", "い", "う", "え"]があり、 [あ][い] [う][え] のようにUIButtonを作りたいと思っています。 配列[String]に入る要素数は、1~4なので、switchで1~4までの処理を記述してみました。
guest

回答3

0

ベストアンサー

理想とはほど遠いですが。

swift

1//button1(左上)を基準としたボタン定義 2let base = CGRect(x: 20, y: 200, width: 50, height: 30) 3let buttons: [(title: String, offsetX: CGFloat, offsetY: CGFloat)] = [ 4 ("あ", 0, 0), 5 ("い", +100, 0), 6 ("う", 0, +50), 7 ("え", +100, +50), 8] 9//生成 10buttons.forEach { 11 let origin = CGPoint(x: base.origin.x + $0.offsetX, y: base.origin.y + $0.offsetY) 12 let button = UIButton(frame: CGRect(origin: origin, size: base.size)) 13 button.setTitle($0.title, for: .normal) 14 print(button.title(for: .normal)!, button.frame) 15} 16//=> あ (20.0, 200.0, 50.0, 30.0) 17//=> い (120.0, 200.0, 50.0, 30.0) 18//=> う (20.0, 250.0, 50.0, 30.0) 19//=> え (120.0, 250.0, 50.0, 30.0)

投稿2019/06/25 08:11

fuzzball

総合スコア16731

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

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

0

このケースであれば、ネストしたif文で書くのが良いと思います。

投稿2019/06/25 06:05

otn

総合スコア84533

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

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

0

トリッキーなのでもよければ

swift

1func 処理A() { print("A") } 2func 処理B() { print("B") } 3func 処理C() { print("C") } 4func 処理D() { print("D") } 5 6let tasks = [処理A, 処理B, 処理C, 処理D] // Array of () -> Void.

を用意して

swift

1 2guard case (1...4) = number else { fatalError() } 3 4tasks.prefix(number).forEach { $0() }

で出来ます。

投稿2019/06/25 05:00

MasakiHori

総合スコア3384

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問