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

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

ただいまの
回答率

88.10%

【Swift】ゲームアプリでステージごとにスコアを保存したい。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,503

score 54

前提・実現したいこと

ゲームアプリを作っているのですが、ステージごとにスコアを保存したいです。
以下のように色々選択肢があるようなのですが、できればNSUserDefaultsを使いたいです。
・NSUserDefaults
・CoreDate
・Parse

考えてみたこと

以下のように配列の要素番号(someArray[0])を各ステージにあわせて保存しようかと考えました。
ただもっと良い方法がありそうです。
アドバイスいただけるとありがたいです。

ソースコード

var someArray: [Int]!
var score = 0
let userDefaults = NSUserDefaults.standardUserDefaults()

//ステージの数だけ配列の要素を代入
someArray = [0,0,0,0,0]
someArray[0] = score
userDefaults.setObject(someArray, forKey: "someArray")
userDefaults.synchronize()
someArray = userDefaults.objectForKey("someArray") as! [Int]
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Stripe

    2016/02/03 20:37

    そのコードに何か問題があるんですか?

    キャンセル

  • mmmm

    2016/02/06 19:20

    このコードには問題ないのですが、ipadcaronさんが回答してくれたようにもう少しクラスや構造体単位で考えられればいいなっと考え質問させていただきました。もし、アドバイスあればよろしくお願いします!

    キャンセル

回答 1

checkベストアンサー

0

配列とか小さい纏まりの粒度ではなくてもう少し大きい考え方をすると良いですよ。
例えば、クラス、構造体など。文字列に変換して、文字列からクラスに戻したり、構造体に戻したり、可逆変換可能な形式でデータの保存と復帰ができるようにした方がベターです。ゲームも機能が増えるにつれて、配列の要素だけ出し入れするいがいに、点数やキャラクタのアバターやらの情報がひつようになるかもしれないし。今目先のことで配列だけ出し入れできれば十分なら今の方法で問題ないと思いますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/06 19:18

    アドバイスありがとうございます。自分がぼんやりと考えていた回答があり、非常にありがたいです。
    以下を学習するために具体的にどのような学習をすればいいかアドバイスをいただけないでしょうか。何かこれを見といたほうがいいとURLやどうやって学習するのかというヒントをいただければ幸いです。
    >文字列に変換して、文字列からクラスに戻したり、構造体に戻したり、可逆変換可能な形式でデータの保存と復帰ができるようにした方がベター。

    キャンセル

  • 2016/02/06 21:17

    http://easyramble.com/nsuserdefaults-wrapper-property-class.html
    ここで、いろんな変数を一杯出し入れする方法があります。
    私も、エセswift 使いでして、、、ここの人もかいているように、これじゃダメなんです。
    何がダメかというと、age やら名前と userdefaults のgetter/setter を宣言と同時に書いていますよね、これだと、変数が増えるたびに実装を追加しなくちゃならない。
    int,string,float などの型と何かを複数格納する器を与えると、自動的に値を取得する、自動的に値を保存する、みたいな仕掛けでやらないと、変数が増えるたびに都度その実装を書かなくちゃならない。
    本職は、c#, java なので、これらの言語ならこういう纏まった固まりをシリアライズ、デシリアライズする方法が簡単に書けるのですが、私もこのHPの方と同じく swift ならどう書くの?書き方わからん、なんです。
    http://qiita.com/Nietzsche/items/ed347f6eafd1bdb0bc51
    swift 使いなら誰しも面倒くさいなぁ、と思ってると思います。例えば、
    setUserData(var objs as object);
    getUserData();
    こういうプロトタイプのget/set メソッドがあり、
    class aaaaa
    int a,b,c
    string x,y,z
    float hijk

    こんなクラスを上記のメソッドで、出し入れできたら最高ですよね。
    この場合、最初のhpの方の方法では、各変数に対応するデータの出し入れと変換処理をそれぞれ記述しなくちゃなりまsrん。でも、ゲーム作ってくうちに、これじゃあまりにもデータの出し入れのためだけの似たような記述ばっかりで全然メインのロジックに手がつけられない、とか変なところで悩みます。
    リフレクション というのが swift でもできる?かなぁ。

    キャンセル

  • 2016/02/06 21:29

    http://furuya02.hatenablog.com/entry/2015/07/30/043029

    swiftyJSON というライブラリが良さそうです。json 文字列からクラスに落とすのに皆さん使ってるようです。
    上記hpのサンプルはその逆。クラスを json文字列に変換する方法です。

    キャンセル

  • 2016/02/06 21:32

    http://qiita.com/bannzai/items/96b912a9db43cefdb728
    このhpでリフレクションの解説があります。

    キャンセル

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

  • ただいまの回答率 88.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る