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

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

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

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Swift

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

Swift 2

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

Q&A

解決済

1回答

2297閲覧

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

mmmm

総合スコア54

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Swift

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

Swift 2

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

0グッド

0クリップ

投稿2016/02/03 11:06

###前提・実現したいこと
ゲームアプリを作っているのですが、ステージごとにスコアを保存したいです。
以下のように色々選択肢があるようなのですが、できれば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]

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

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

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

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

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

Stripe

2016/02/03 11:37

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

2016/02/06 10:20

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

回答1

0

ベストアンサー

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

投稿2016/02/03 14:47

ipadcaron

総合スコア1693

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

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

mmmm

2016/02/06 10:18

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

2016/02/06 12: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 でもできる?かなぁ。
ipadcaron

2016/02/06 12:29

http://furuya02.hatenablog.com/entry/2015/07/30/043029 swiftyJSON というライブラリが良さそうです。json 文字列からクラスに落とすのに皆さん使ってるようです。 上記hpのサンプルはその逆。クラスを json文字列に変換する方法です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問