Foo | Nil
と Either<Foo, Nil>
を混ぜて扱うこと自体に無理がある・・・。 Codable
と JSON の Foo??
とかも。色んなところで歪みが出るのは避けられなくて、できるだけ普段目に触れないところで出すようにしてるけど、普段目に見えないからこそ不意をつかれた感じになる。Optional
に代入する度に .some
を書くべきなのか)とかを考えると仕方ないよなぁ。仮に全部 Foo | Nil
に寄せると IteratorProtocol
の next
が( Element
が Optional
のときに)表現できないとかそれはそれで問題があって、とはいえ Foo | Nil
と Either<Foo, Nil>
を適切に使い分けるのもハードルが高いし、どれを取っても一長一短。なので、 Swift は理論的なきれいさよりも実用上の使いやすさをとって、その分生じる歪みをできるだけ目立たないところで消化するという選択なんだろうなぁ。