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

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

新規登録して質問してみよう
ただいま回答率
85.35%
ニフティクラウドmobile backend

ニフティクラウドmobile backend (mBaaS)はニフティが提供するBaasサービスです。プッシュ通知、データストア、ファイルストア、会員管理・認証機能などのバックエンド機能をクラウドから提供しています。 Andoird/iOS/JavaScript/Unityと各種SDKに対応しています。

Xcode

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

Swift

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

Q&A

解決済

1回答

1281閲覧

ニフティクラウドから取得したデータをswifftで並べ直したい

退会済みユーザー

退会済みユーザー

総合スコア0

ニフティクラウドmobile backend

ニフティクラウドmobile backend (mBaaS)はニフティが提供するBaasサービスです。プッシュ通知、データストア、ファイルストア、会員管理・認証機能などのバックエンド機能をクラウドから提供しています。 Andoird/iOS/JavaScript/Unityと各種SDKに対応しています。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2020/05/20 15:35

前提・実現したいこと

ニフティクラウドから取得したデータを複数あるキーの内,
任意のキーの値で並べ直して配列に入れたいです.

例えば,

swift

1[{ 2 "Name" : "田中", 3 "getFlag" : true, 4 "updateDate" : { 5 "__type" : "Date", 6 "iso" : "2020-04-16T06:46:12.137Z" 7 }, 8 "acl" : { 9 "*" : { 10 "write" : true, 11 "read" : true 12 } 13 }, 14 "HP" : 2, 15 "MP" : 2, 16 "objectId" : "*********", 17 "Num" : 1, 18 "createDate" : { 19 "__type" : "Date", 20 "iso" : "2020-04-16T06:26:34.292Z" 21 } 22}, 23{ 24 "Name" : "佐藤", 25 "getFlag" : true, 26 "updateDate" : { 27 "__type" : "Date", 28 "iso" : "2020-04-16T06:46:12.137Z" 29 }, 30 "acl" : { 31 "*" : { 32 "write" : true, 33 "read" : true 34 } 35 }, 36 "HP" : 8, 37 "MP" : 90, 38 "objectId" : "*********", 39 "Num" : 2, 40 "createDate" : { 41 "__type" : "Date", 42 "iso" : "2020-04-16T06:26:34.292Z" 43 } 44}//以下たくさん(Numは順不同)

のデータを取得できたとします.
これをNum順に並べ直したいとき,
どのようなコードを書けばいいのでしょうか.

試したこと

配列や辞書での検索やソート関係を探して試しましたが
どれもうまくいかず仕舞いでした.

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

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

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

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

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

hoshi-takanori

2020/05/20 16:34

そのデータをどういう型で受け取ってるかにもよりますが、var data: [[String: Any]] なら data.sort { ($0["Num"] as! Int) < ($1["Num"] as! Int) } でしょうか。
退会済みユーザー

退会済みユーザー

2020/05/21 03:18

回答ありがとうございます. データの受け取り方を書いておりませんでしたね,すみませんでした. データは,data:[NCMBObject] で受け取っています. 回答していただいた方法ですと, 「 Value of type 'NCMBObject' has no subscripts 」 というエラーが出てきます... 調べてみたところ,辞書型に一回キャストすれば良さげでした. そこで deta.value as! [String: Any] (そもそも,この書き方で合っているのかもわからない) をしてみたところ, 「 Value of type '[NCMBObject]' has no member 'value' 」 というエラーが出てきました. キャスト方法が違うのでしょうか・・・?
hoshi-takanori

2020/05/21 04:52

NCMBObject は使ったことないので良く分かりませんが、 https://github.com/NIFCLOUD-mbaas/UserCommunity/issues/949 によれば object(forKey:) で値を取得するようですね。 ってことはたぶん、var data: [NCMBObject] に対して、 data.sort { ($0.object(forKey: "Num") as! Int) < ($1.object(forKey: "Num") as! Int) } で行けるかも? 参考 https://mbaas.nifcloud.com/assets/sdk_doc/ios_2.4.3/doc/html/Classes/NCMBObject.html https://qiita.com/naokits/items/db6dfd0eddcf5a38f1dc
退会済みユーザー

退会済みユーザー

2020/05/21 06:24 編集

回答有難うございます!! その書き方でソートすることができました!! 考え方を見てスッキリしました. 参考も丁寧にリンクを貼ってくださり 本当にありがとうございます. 最後に気づいたのですが,ここは追記フォームでした... そのため,hoshi-takanori様に評価をつけることができません. 回答フォームにコピペでいいので先程の回答を記入してもらえないでしょうか? 3日経っても記入されない場合,勝手ですが自己解決の方に記入させていただきます. 気づくのが遅くなって申し訳ありません...
guest

回答1

0

ベストアンサー

ニフティクラウドから取得したデータは NCMBObject (の配列) になってるとのことで、https://github.com/NIFCLOUD-mbaas/UserCommunity/issues/949 によれば object(forKey:) で値を取得するようなので、こんな感じでいかがでしょうか。

swift

1var data: [NCMBObject] 2data.sort { ($0.object(forKey: "Num") as! Int) < ($1.object(forKey: "Num") as! Int) }

参考: NCMBObject Class Reference (Objective-C)
参考: NCMBObjectはサブクラス化して使おう! - Qiita

投稿2020/05/21 06:48

hoshi-takanori

総合スコア7901

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問