Sponsor Link
環境&対象
- macOS Monterey 12.1 beta3
- Xcode 13.2 beta2
- iOS 15
Optional
Swift の Optional 自体は説明しませんが、Optional が enum であることは知っておく必要があります。
持つ値は、.some か .none です。この値を明示的に使用している人は少ない気もしますが、改めて説明します。
Optional.none
Apple のドキュメントは、こちら。
Optional が値を持たないということを明確に表現するための 値(enum)。
nil をセットすることと動作的には同じになるはずですが、意図がより明確化されるので、.none を使用することが推奨されます。
Optional.some
Apple のドキュメントは、こちら。
Optional の wrap する型( Int? という型であれば、Int のことです)になることを確認して値をセットする値(enum)。
ちょっと意味不明に感じるかもしれませんが、Optional 型を渡すケースで、値が存在することを明示的にしてセットしたい時に使うと良いと思います。
例えば、SwiftUI で選択できるリストであれば、selection には、Optional 型の Binding を渡します。選択対象とするリスト要素には、その型で .tag 指定することが必要となります。
しかし、.tag は、Hashable な値はすべて受け取りますので、適切な型で渡しているかは、分かりにくいです。
このようなケースでは、(当たり前かもしれませんが)その値の型を明示してセットすることができるとコードの意図が分かりやすくなります。
つまり .tag に nil ではない = Optional の unwrap する型の値であることを確認して設定したいときに、.some を使うと明示できることになります。
まとめ:Optional の .some と .none
- Optional 変数に 値をセットしないことを明示するためには、.none を使用する
- Optional 変数に、特定の型であることを確認しながら渡すためには、.some を使用する
- .some, .none を使用すると Optional での意図を明示しながら設定できるようになる
説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。
Sponsor Link