実現したいこと
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 = 0 12var 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 += 1 27} while i < dateInterval + 1
Swift
1import RealmSwift 2class Post: Object{ 3 @objc dynamic var id = 0 4 @objc dynamic var percent = "" 5 @objc dynamic var date = Date() 6}
補足情報(FW/ツールのバージョンなど)
Xcode 14.1
Realm 5.1.0

回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2023/03/30 00:13
2023/03/30 06:48 編集