2024/01/10 09:51
Void とは、何もない値を意味する型です。
Swift では、標準ライブラリーで次のように空のタプル () として定義されています。
typealias Void = ()何もない値を意味する型の性格上、この型のデータサイズは 0 になっていて、取り得る値は、純粋に値を全く持たない空のタプルのインスタンス () だけになります。
関数での役割
Void は主に関数またはメソッドが 戻り値を返さない ことを表現するのに使われます。厳密には、原則として Swift の関数は戻り値を必ず返すことになっていて、ここで Void を利用することで「何もない値を返す関数」として表現することになります。
func doSomething() -> Void {
return ()
}このように記すと、関数 doSomething は値を返さない関数として定義され、そして Void 型に対応する値 () を返すことで、戻り値を返さない関数を表現できるようになります。
この表記では冗長なため、Swift では関数宣言でその戻り値が Void のときは戻り値の型を省略することができます。また return と記述するだけ、もしくは関数本体の最後に到達した段階で何もない値を返すように動作するため、値を返さない関数を次のようにシンプルに記載できます。
func doSomething() {
}オプショナル型との併用
たとえば、次のような型があったとします。
class Controller {
func action() {
}
}この型をオプショナル型で扱ったとして、 オプショナル・チェイニング (Optional Chaining) を用いて action メソッドを実行したとします。
ここでそのメソッドが実行できたかどうかを判断したい場合、戻り値がない関数であっても、オプショナル・チェイニングの効果によって、戻り値として Void? 型の値が得られます。これにより 何もない値を得られたか、またはそれが得られなかったか を示す値(情報量を持つ値)に変化するため、これが nil かどうかを判定することで、戻り値を返さない関数(Void を返す関数)を実行できたか判定できるようになります。
let controller: Controller? = Controller()
if controller?.action() != nil {
print("DONE")
}補足:完全に値を返さない関数について
Swift では、正真正銘、値を返さない関数も表現できるようになっています。その場合は戻り値として Void の代わりに Never を指定することで実現できます。