【Swift】戻り値が複数の関数を作るにはタプルを利用する(Swift 2.1、XCode 7.2)

2020年6月16日

戻り値が複数ある関数を定義する

C言語やJavaを使ったことのある人は、関数を呼び出したときの戻り値は1個だけというイメージがある。複数の値を戻す必要がある場合は、ポインタを利用したり、クラスインスタンスにデータを詰めてインスタンスの参照を返すといった方法をとってきた。しかし、Swiftではで戻り値が複数の関数を定義できる。

戻り値が複数の関数は以下のように定義する。

戻り値が複数ある関数の使用例

以下のコードは、商品の価格と個数を与えると税抜価格と税込価格を返す関数。戻り値は2つの値が格納されたタプルで返ってくる。例では、「let(変数, 変数)」と定義して2つの変数に直接タプルに格納されている値を代入している。

 

以下のコードのように、タプルの戻り値をタプルの変数に代入してインデックス番号で値を参照する方法もある。

 

タプルに格納されて返されるデータはIntやStringなどの基本データ型に限らない。

以下のコードは、関数が2つの配列を返す関数の例である。関数を呼び出した側は、戻り値をタプルの変数に代入し、インデックス番号で配列を取得している。

 

もちろん、クラスや構造体も複数の戻り値の中に含めることができる。

以下のコードは、商品情報の構造体を引数に受け取り、税込価格に変更した商品情報と税率を返す関数の例。

ちなみに、構造体は値型なので、関数に渡った時点で構造体のコピーが作られる。そのため、関数に引き渡すために作った商品情報(before_shouhin)と関数から戻ってきた商品情報(after.0)の価格は別の値になる。構造体については次の記事も参照されたし。⇒「記事