Open14

Cycle周りのリファクタリング

satomilkysatomilky

実装していて、CycleList ,Calendar, Chartの各ビューは

過去

  • 長すぎる時(妊娠時など)
  • 普通の時

現在のサイクル

  • まだ終了予定日が来てない時
  • 終了予定日を少し遅れている時
  • 終了予定日を大幅に超過してる時(period入力し忘れなどで)

と言う感じでCycleの長さに応じて表示を細かく調整する。
と言うことが多すぎて大変なので、もうCycleに対して、statusの動的プロパティを持たせることにした。

これで、Viewごとに出しわけロジックを再生産する必要がなくなることを期待する。

satomilkysatomilky

ここまで書いておいて、あ、これじゃダメだ。となった。

現在のサイクル

  • まだ終了予定日が来てない時
  • 終了予定日を少し遅れている時
  • 終了予定日を大幅に超過してる時(period入力し忘れなどで)

これをしたいなら、そのユーザーの基本生理周期日と比較しなきゃいけないんじゃ。。

satomilkysatomilky

表現、これでいい?ってよくAIに聞くんだけど、

chatGPT

Claude

いつも、Claudeの方が気が利いてるんだよなぁ。
ってか、

enum CycleStatus {
  case onSchedule
  case delayed(days: Int)
}

みたいな書き方あるの!!!

とちょっと新しい発見もあって、本当にClaude良いじゃん。

satomilkysatomilky

列挙体ってこんなふうにネストできたっけ?

satomilkysatomilky

家の掃除が終わったので再開。で作った。

satomilkysatomilky

currentサイクルの時に、返すDaysのプロパティを、いちいちView側で設定しなくてもいいものにするぞ。

satomilkysatomilky

と思ったけど、ここでもcycleの引数が必要なので、関数化するしかないのか。。
影響範囲が大きそうだから、このdaysプロパティは消さずに、別途関数作ろ。

satomilkysatomilky

ちょっと変えた。列挙体に.pastを追加して見通しよくした。

satomilkysatomilky

statusの算出ロジック間違ってた。
予測終了日の出し方間違っとるやんけ。。

satomilkysatomilky

また、間違えてたので直した。

テストコードを書いた方が早かったかも。。

satomilkysatomilky

こんなふうにストライプにしたくて、この実装をするのに一番時間がかかってしまった。

初めはこれ試して
https://stackoverflow.com/questions/63130755/custom-cross-hatched-background-shape-or-view-in-swiftui
だめで。

Imageでリピートか。

と思ったけど、うまく行かなくて。。

で、最終的にこちらが参考になりました。
https://talk.objc.io/episodes/S01E389-pattern-shape-styles

色変えたくて、引数に色の設定ができるように最終的にカスタムして終了。