【Swift-Realm・Charts】X軸に対応するY軸の値がない場合のグラフの描画の方法を教えてください

実現したいこと

X軸に日付、Y軸に値を入れたグラフを作ろうとしています。(ライブラリはChartsを利用)
X軸に1番初めの日から1日ずつずらした日付を入れて、Y軸にはそれに対応する値(ない場合もある)を入れようと考えています。

イメージとしては以下の画像の通りで、値が入力されていない日は無視して、値が入力されている日のデータのみを折れ線グラフで繋ぐイメージです。
イメージ説明

X軸で使う、日にちを1日ずつずらしたDate型の配列は保持できているのですが、Y軸で使いたい、日付に応じたデータ(下記percentにあたる値)が適切に代入されず、以下のようなエラーが出てしまいました。
(ChartsではY軸の値としてnilを使うことができないそうなので、そもそもこのコードの定義自体間違っているのかもしれないです)

上記イメージのようなグラフを作りたい場合、どのようにX軸・Y軸の値を定義し、描画していけば良いのでしょうか。下記のようにX軸の日付データに対応する値を1つずつ代入する方法ではChartsを扱う上で誤りなのでしょうか。ご教授いただけますと大変ありがたいです。

発生している問題・エラーメッセージ

下記ソースコード18行目で

Comparing non-optional value of type 'Results<Post>' to 'nil' always returns true

となってしまい、そのままコードを実行させると

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

とエラーが出ます。

該当のソースコード

Swift

1var points = try! Realm().objects(Post.self).sorted(byKeyPath: "date", ascending: true)2//X軸日付データ3var date: [Date] = []4//Y軸値データ5var percent: [Int?] = []6 7var firstPost = points.first?.date 8var lastPost = points.last?.date 9//経過日数10var dateInterval: Int = Int(lastPost!.timeIntervalSince(firstPost!)) / (24 * 60 * 60)11var i = 012var detailDate = Date()13repeat{14 detailDate = Calendar.current.date(byAdding: .day, value: i , to: firstPost!)!15 var predicate = NSPredicate(format: "date == %@", detailDate as CVarArg)16 var result = realm.objects(Post.self).filter(predicate)17 //もしpointsの中にdetailDateと同じ日付がある場合18 if result != nil{19 percent.append(Int(result.first!.percent))20 } else{21 percent.append(nil)22 }23 print(result)24 print(detailDate)25 date.append(detailDate)26 i += 127} while i < dateInterval + 1

Swift

1import RealmSwift2class Post: Object{3 @objc dynamic var id = 04 @objc dynamic var percent = ""5 @objc dynamic var date = Date()6}

補足情報(FW/ツールのバージョンなど)

Xcode 14.1
Realm 5.1.0

コメントを投稿

0 コメント