実現したいこと
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 コメント