Cycle周りのリファクタリング
実装していて、CycleList ,Calendar, Chartの各ビューは
過去
- 長すぎる時(妊娠時など)
- 普通の時
現在のサイクル
- まだ終了予定日が来てない時
- 終了予定日を少し遅れている時
- 終了予定日を大幅に超過してる時(period入力し忘れなどで)
と言う感じでCycleの長さに応じて表示を細かく調整する。
と言うことが多すぎて大変なので、もうCycleに対して、statusの動的プロパティを持たせることにした。
これで、Viewごとに出しわけロジックを再生産する必要がなくなることを期待する。
ちょっとレベル感が違う気もするが。。一旦これで。
ここまで書いておいて、あ、これじゃダメだ。となった。
現在のサイクル
- まだ終了予定日が来てない時
- 終了予定日を少し遅れている時
- 終了予定日を大幅に超過してる時(period入力し忘れなどで)
これをしたいなら、そのユーザーの基本生理周期日と比較しなきゃいけないんじゃ。。
表現、これでいい?ってよくAIに聞くんだけど、
chatGPT
Claude
いつも、Claudeの方が気が利いてるんだよなぁ。
ってか、
enum CycleStatus {
case onSchedule
case delayed(days: Int)
}
みたいな書き方あるの!!!
とちょっと新しい発見もあって、本当にClaude良いじゃん。
列挙体ってこんなふうにネストできたっけ?
(娘に邪魔された。)
できそう
こんな感じか。
家の掃除が終わったので再開。で作った。
currentサイクルの時に、返すDaysのプロパティを、いちいちView側で設定しなくてもいいものにするぞ。
と思ったけど、ここでもcycleの引数が必要なので、関数化するしかないのか。。
影響範囲が大きそうだから、このdaysプロパティは消さずに、別途関数作ろ。
ちょっと変えた。列挙体に.pastを追加して見通しよくした。
statusの算出ロジック間違ってた。
予測終了日の出し方間違っとるやんけ。。
また、間違えてたので直した。
テストコードを書いた方が早かったかも。。
こんなふうにストライプにしたくて、この実装をするのに一番時間がかかってしまった。
初めはこれ試して
だめで。Imageでリピートか。
と思ったけど、うまく行かなくて。。
で、最終的にこちらが参考になりました。
色変えたくて、引数に色の設定ができるように最終的にカスタムして終了。