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

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

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

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Swift

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

Q&A

解決済

2回答

393閲覧

ifで場合分けして、user defaultsで保存したい

退会済みユーザー

退会済みユーザー

総合スコア0

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Swift

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

0グッド

0クリップ

投稿2017/12/12 07:42

編集2017/12/12 07:45

xcode9.2で学習アプリを作っています。
テスト問題を解いてokbtnを押した時に、得た合計のポイントに応じてボタンを押した回数がカウントアップされるようにしたいです。

var ooo1 = 0
var ooo2 = 0
var ooo3 = 0

例えば、
合計ポイントが50〜100ならooo1 = 1,ooo2 = 0,ooo3 = 0
合計ポイントが100〜150ならooo1 = 0,ooo2 = 1,ooo3 = 0
合計ポイントが150〜200ならooo1 = 0,ooo2 = 0,ooo3 = 1
というようにカウントアップするものを変えて、それをuserdefaultsで保存したいのですがうまくいきません。

@IBAction func okbtn(_ sender: AnyObject){ if(goukei>=50)&&(goukei<100) {   ooo1 += 1 }else if (goukei>=100)&&(goukei<150) {   ooo2 += 1 }else if ......{ ...... } NSLog("11==(ooo1)==") NSLog("22==(ooo2)==")

とした場合、goukei = 60の時『ooo1 = 1,ooo2 = 0』となるのですが、これにuserdefaultsを用いて

@IBAction func okbtn(_ sender: AnyObject){ if(goukei>=50)&&(goukei<100) {  let ooo1 = UserDefaults.standard.integer(forKey: "ggg")   ooo1 += 1  UserDefaults.standard.set(ooo1, forKey: "ggg") }else if (goukei>=100)&&(goukei<150) {  let ooo2 = UserDefaults.standard.integer(forKey: "ggg")   ooo2 += 1  UserDefaults.standard.set(ooo2, forKey: "ggg") }else if ......{ ...... } let ooo1 = UserDefaults.standard.integer(forKey: "ggg") let ooo2 = UserDefaults.standard.integer(forKey: "ggg") NSLog("11==(ooo1)==") NSLog("22==(ooo2)==")

とした場合、goukei = 60の時『ooo1 = 1,ooo2 = 1』と、どちらもカウントアップされてしまいます。
色々試したのですが上手くいかず、改善方法を教えていただきたいです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

質問とは関係ありませんが、この場合の条件分けはswitchを使った方が分かりやすいです。

例えば、

swift

1func values(for goukei: Int) -> (Int, Int, Int) { 2 3 switch goukei{ 4 case 0..<100: return (1, 0, 0) 5 case 100..<150: return (0, 1, 0) 6 case 150..<200: return (0, 0, 1) 7 .... 8 } 9}

swift

1let values = values(for: goukei) 2ooo1 += values.0 3ooo2 += values.1 4ooo3 += values.2 5 6// ここですべての値を userdefaults にストアする

投稿2017/12/12 09:05

MasakiHori

総合スコア3384

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

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

退会済みユーザー

退会済みユーザー

2017/12/13 07:58

今回はooo1〜ooo126まであり長くなってしまったのでreturn( )の部分は使わなかったのですが、swhitchにしたことで{ }が減り、見やすくなりました! またreturn( )の部分も試してみたいと思います。 ありがとうございます!
MasakiHori

2017/12/13 08:30

あくまで例ですのでswitch以外の部分は無理やり使う必要はないですよ。
guest

0

ベストアンサー

swift

1let ooo1 = UserDefaults.standard.integer(forKey: "ggg") 2let ooo2 = UserDefaults.standard.integer(forKey: "ggg")

キーが同じなので値も同じになります。
ooo1とooo2で使うキーを分けて下さい。

投稿2017/12/12 08:04

fuzzball

総合スコア16731

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

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

退会済みユーザー

退会済みユーザー

2017/12/13 07:54

キーの使い分けが必要なのですね。 修正したところ、うまくいきました! ご教授頂きありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問