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

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

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

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

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

Q&A

0回答

379閲覧

[Swift4] Realmデータベースで得点の順位でソートする方法

donadona

総合スコア19

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

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

0グッド

0クリップ

投稿2019/08/25 11:16

編集2022/01/12 10:55

2種目の合計で競う競技で、随時得点を追加して行くと、その時点での順位に並び替えるアプリを作成しています。

具体的に作成しているモデルは、

import Foundation import RealmSwift class Entry : Object { @objc dynamic var id: String = NSUUID().uuidString // primary key @objc dynamic var entryNumber : Int = 1 @objc dynamic var name : String let scores = List<Score>() var totalScore : Double { get { var s = 0.0 for i in 0..<scores.count { s += scores[i].scoreT } return s } } override static func primaryKey() -> String? { return "id" } } class Score : Object { @objc dynamic var shumokuName : String @objc dynamic var scoreA : Double = 0.0 @objc dynamic var scoreB : Double = 0.0 dynamic var scoreT : Double { get{ return scoreA + scoreB } } ~~let entries = List<Entry>()~~  ←削除 }

この時に、Entry (競技に参加者分存在)をtotalScoreの順にソートしたいのですが、

let entries = realm.objects(Entry.self).sorted(byKeyPath: "totalScore", ascending: false)

とやっても、**property 'Entry.totalScore' does not exist.'**とエラーになります。
やはり、EntryのtotalScoreを

@objc dynamic var totalScore : Double

と定義して、計算結果を都度データベースに保存しないといけないのでしょうか?

よろしくお願いします。

【補足】
Scoreは、種目名と、scoreA(技術点)、scoreB(芸術点)が基本要素にあり、scoreAとscoreBの合計(scoreT)がその種目の得点となります。
競技種目は5種類あって、大会(部門)によって、1種目(いわゆる種目別)から5種目の総合で争うケースが想定されます(小さな大会では2種目戦や3種目戦があります)。
そのためEntryのscoresはリストになっております。

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

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

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

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

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

hameji

2019/08/25 13:30

なんか設計がよくわからないんですが、、、 EntryにList<Score>をもたせてるのに、ScoreにList<Entry>をもたせている 循環してて変だと思いますが、、、 2種の競技と聞いても、ちょっと疎くてピンとこないんですが、 具体的な例を出していただくと助かるんですが、、、 体操とかですか???
donadona

2019/08/25 13:47

コメントいただきありがとうございます。 モデルの具体的な内容について、補足説明を追加しました。 Score側の let entries = List<Entry>() は不要ですので削除しました。
hayabusabusash

2019/08/27 01:00

totalScoreがRealm管理下になっていないのが問題な気がするので、 おっしゃる通りtotalScoreもRealm管理下にする必要があると思います。 ただ、RealmでソートすることにこだわらなければResults型からArrayに変換して その後ソートするようにするのも可能なんじゃないかなと思ったのですが、どうでしょうか?
donadona

2019/08/27 10:29

なるほど。確かにそうですね。 そんなに大量のエントリーがあるわけではないので、realmで行う必要はないですね。 後ほどそれで試してみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問