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

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

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

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xcode

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

Swift

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

Swift 2

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

Q&A

解決済

2回答

1228閲覧

swiftでswitchを使った判定機能の実装。(C言語からswift に直そうとしてエラー)

natsusoranosita

総合スコア18

Xcode 7

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Xcode

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

Swift

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

Swift 2

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

0グッド

0クリップ

投稿2017/04/04 03:12

編集2017/04/06 11:46

###前提・実現したいこと
swiftでswitchを使った判定機能の実装。
C言語のコードが正しいので、Swiftだとどのように記述するのか教えていただきたいです、。

###発生している問題・エラーメッセージ
どのような条件を入れても、case aの計算式で実装されてしまう。

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

swift

1var x : Int 2 var y : Int 3 var z : Int 4 5 x=Int(Double(yuzaTextField.text!)!) 6 z=Int(Double(kikanTextField.text!)!) 7 8 let a = koutikuTextField.text == "再構築" && kiboTextField.text == "中堅ベンダー" && kosutoTextField.text == "ソフトウェア&ハード" && jisyakiboTextField.text == "中企業" && z < 13 && z < 23 && nanidoTextField.text == "易しい" && x >= 100 && x <= 200 9 10 let b = koutikuTextField.text == "新規構築" && kiboTextField.text == "中堅ベンダー" && kosutoTextField.text == "ソフトウェア&ハード" && jisyakiboTextField.text == "中企業" && z < 13 && z < 23 && nanidoTextField.text == "易しい" && x >= 100 && x <= 200 11 12 let c = koutikuTextField.text == "再構築" && kiboTextField.text == "大手ベンダー" && kosutoTextField.text == "ソフトウェア&ハード" && jisyakiboTextField.text == "中企業" && z <= 13 && z <= 23 && nanidoTextField.text == "易しい" && x >= 100 && x <= 200 13 14 let d = koutikuTextField.text == "新規構築" && kiboTextField.text == "大手ベンダー" && kosutoTextField.text == "ソフトウェア&ハード" && jisyakiboTextField.text == "中企業" && z < 13 && z < 23 && nanidoTextField.text == "易しい" && x >= 100 && x <= 200 15 16 let e = koutikuTextField.text == "再構築" && kiboTextField.text == "中堅ベンダー" && kosutoTextField.text == "ソフトウェア&cloud" && jisyakiboTextField.text == "中企業" && z < 13 && z < 23 && nanidoTextField.text == "易しい" && x >= 100 && x <= 200 17 18 let f = koutikuTextField.text == "新規構築" && kiboTextField.text == "中堅ベンダー" && kosutoTextField.text == "ソフトウェア&cloud" && jisyakiboTextField.text == "中企業" && 12 < z && z < 24 && nanidoTextField.text == "易しい" && 99 < x && x < 201 19 20 21 22 switch (a || b || c || d || e || f){ 23 24 case a: 25 y = 500000 * x 26 resultViewController.y = Double(y) 27 28 case b: 29 y = (500000+100000) * x 30 resultViewController.y = Double(y) 31 32 case c: 33 y = (500000+320000) * x 34 resultViewController.y = Double(y) 35 36 case d: 37 y = (500000+100000+320000) * x 38 resultViewController.y = Double(y) 39 40 case e: 41 y=(500000-250000) * x 42 resultViewController.y = Double(y) 43 44 case f: 45 y=(500000+100000-250000) * x 46 resultViewController.y = Double(y) 47 48 default: 49 resultViewController.y = 8 50 51 } 52 }

下記はc言語で記載してコンパイルできたものです。(一部swiftの形式の可能性あり)今回はこれをswiftにしたいです。

var x : Int var y : Int var z : Int                  if Double(yuzaTextField.text!) != nil{             x=Int(Double(yuzaTextField.text!)!)         }         if Double(kikanTextField.text!) != nil{             z=Int(Double(kikanTextField.text!)!)         } y = 500000x switch( (koutikuTextField.text | kiboTextField.text | kosutoTextField.text | jisyakiboTextField.text | z | nanidoTextField.text | x){ case (koutikuTextField.text == "再構築" && kiboTextField.text == "中堅ベンダー" && kosutoTextField.text == "ソフトウェア&ハード" && jisyakiboTextField.text == "中企業" && (z < 13 && z < 23) && nanidoTextField.text == "易しい" && (x >= 100 && x <= 200): y=500000x break; case (koutikuTextField.text == "新規構築" && kiboTextField.text == "中堅ベンダー" && kosutoTextField.text == "ソフトウェア&ハード" && jisyakiboTextField.text == "中企業" && (z < 13 && z < 23) && nanidoTextField.text == "易しい" && (x >= 100 && x <= 200): y=(500000+100000)x break; case (koutikuTextField.text == "再構築" && kiboTextField.text == "大手ベンダー" && kosutoTextField.text == "ソフトウェア&ハード" && jisyakiboTextField.text == "中企業" && (z < 13 && z < 23) && nanidoTextField.text == "易しい" && (x >= 100 && x <= 200): y=(500000+320000)x break; case (koutikuTextField.text == "新規構築" && kiboTextField.text == "大手ベンダー" && kosutoTextField.text == "ソフトウェア&ハード" && jisyakiboTextField.text == "中企業" && (z < 13 && z < 23) && nanidoTextField.text == "易しい" && (x >= 100 && x <= 200): y=(500000+100000+320000)x break; case (koutikuTextField.text == "再構築" && kiboTextField.text == "中堅ベンダー" && kosutoTextField.text == "ソフトウェア&cloud" && jisyakiboTextField.text == "中企業" && (z < 13 && z < 23) && nanidoTextField.text == "易しい" && (x >= 100 && x <= 200): y=(500000-250000)x break; case (koutikuTextField.text == "新規構築" && kiboTextField.text == "中堅ベンダー" && kosutoTextField.text == "ソフトウェア&cloud" && jisyakiboTextField.text == "中企業" && (z < 13 && z < 23) && nanidoTextField.text == "易しい" && (x >= 100 && x <= 200): y=(500000+100000-250000)x break; }

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

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

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

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

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

fuzzball

2017/04/04 05:48

「下記はc言語で記載してコンパイルできたものです」と書いてありますが、C言語じゃないですよね?
ozwk

2017/04/06 12:35

Objective-Cのことですかね?
natsusoranosita

2017/04/06 12:47

そうなんですね、友人から届いたファイルでもと言語がわかりませんでした。すみません
ozwk

2017/04/06 13:18

「コンパイルできた」というのもその友人の申告ですか?
guest

回答2

0

ベストアンサー

その友人からもらったコードは、C言語でもObjective-Cでもコンパイルできません。
はっきり言ってめちゃくちゃなコードです。
()の対応すらとれていません。

通常、switch文は、switch()()の中に記載されている値と
case 〜:中に記述されている値が等しいかどうかを判断して
等しい時にcase 〜:に続く行を実行する文です。
switch()の中やcase 〜:の中に条件式を書いたりしません。
そもそもC言語ではそこに条件式を書けません。

元のコードがめちゃくちゃなので、何をしたいのかわかりませんが、
このような色々な場所のデータを参照して判断する用途にはswitch文は向きません。
switch 〜 caseじゃなくてif 〜 else if 〜を使えば、ほぼ今の形で
できそうに思いますし、色々整理すれば、最終的には以下のようなコードで済みそうな気がします。

swift

1 let x = Int(yuzaTextField.text!) ?? 0 2 var y = 500000 3 if koutikuTextField.text == "新規構築" { 4 y += 100000 5 } 6 if kiboTextField.text == "大手ベンダー" { 7 y += 320000 8 } 9 if kosutoTextField.text == "ソフトウェア&cloud" { 10 y -= 250000 11 } 12 y *= x 13

投稿2017/04/07 02:10

TakeOne

総合スコア6299

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

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

natsusoranosita

2017/04/07 03:35

ほんとですね、よくみたら()の対応すらできてません(°_°) ご丁寧に対応してくださりありがとうございます。 考え直してみます。
guest

0

switch文の条件が、cとswiftで違っていますね。
それに、swiftのコードの条件がおかしい気がします。

下記のようなswitch文で、case bが実行されるか?という問題ですが、何回やってもcase aしか実行されないと思います。

swift

1let a = true 2let b = true 3let c = false 4 5switch(a || b || c){ 6case a: 7 break; 8case b: 9 break; 10case c: 11 break; 12}

投稿2017/04/04 05:28

KaiShoya

総合スコア551

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

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

natsusoranosita

2017/04/04 05:37

回答ありがとうございます。 そうなのですね! 記載しているCが正しいものなのですが、Swiftにこのまま直すとどのような記述になるのかをもしお時間頂けましたら教えていただきたいです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問