Swift 戻り値の扱い方と複数戻り値の返し方|初心者でも分かる関数の基本
生徒
「Swiftの関数で、何か値を返すときってどうすればいいんですか?」
先生
「それは戻り値と呼ばれるもので、関数の処理結果を返す仕組みですね。たとえば、足し算の結果を返すなど、よく使われますよ。」
生徒
「なるほど。でも戻り値って1つだけですか? もし複数の情報を返したいときは?」
先生
「いい質問です!Swiftでは複数の戻り値を返す方法もあります。それじゃあ、順番に基本から解説していきましょう。」
1. 戻り値(もどりち)とは?
関数の処理が終わったあと、その結果を呼び出し元に返すことを「戻り値を返す」と言います。
たとえば、2つの数を足して、その合計だけを返す関数が典型的です。
2. 単一の戻り値を返す基本構文
戻り値がある関数は、-> 戻り値の型で書きます。以下は整数型(Int)の戻り値を返す例です。
func add(a: Int, b: Int) -> Int {
return a + b
}
let result = add(a: 3, b: 5)
print(result)
8
returnは、結果を返すためのキーワードです。
3. 戻り値の型はいろいろ使える
戻り値は、String(文字列)やDouble(小数)など、さまざまな型を使えます。
func greet(name: String) -> String {
return "こんにちは、\(name)さん!"
}
let message = greet(name: "太郎")
print(message)
こんにちは、太郎さん!
4. 戻り値がない場合の書き方
値を返さない関数は、戻り値の型を省略するか、-> Voidと書きます。
func sayHello() {
print("こんにちは!")
}
もしくは明示的にこう書いてもOKです:
func sayHello() -> Void {
print("こんにちは!")
}
5. 複数の戻り値を返す方法(タプル)
Swiftでは、タプルという形を使えば、複数の値を一度に返すことができます。タプルはかんたんに言えば「複数の箱を1つにまとめたもの」です。
func getUserInfo() -> (String, Int) {
return ("花子", 25)
}
let info = getUserInfo()
print(info.0)
print(info.1)
花子
25
info.0やinfo.1のように、位置でアクセスできます。
6. 戻り値に名前をつけて返す
タプルに名前をつけると、より分かりやすくなります。
func getUserInfo() -> (name: String, age: Int) {
return (name: "太郎", age: 30)
}
let user = getUserInfo()
print(user.name)
print(user.age)
太郎
30
このように名前をつけることで、読みやすくなり、エラーも減らしやすくなります。
7. 複数の戻り値を使う場面
例えば、テストの点数と合格・不合格の判定を同時に返すような関数では、複数の戻り値が便利です。
func checkScore(score: Int) -> (Int, String) {
if score >= 80 {
return (score, "合格")
} else {
return (score, "不合格")
}
}
let result = checkScore(score: 75)
print("点数:\(result.0)、判定:\(result.1)")
点数:75、判定:不合格
このように、ひとつの関数で複数の情報を返すことができます。
8. 戻り値に変数を代入して再利用
戻り値を変数に入れておけば、あとから何度でも使うことができます。
func getGreeting() -> String {
return "こんにちは!"
}
let greeting = getGreeting()
print(greeting)
print(greeting + " また会いましょう!")
こんにちは!
こんにちは! また会いましょう!
このように、一度戻り値を取り出しておけば、繰り返し使えるのも便利なポイントです。
9. 戻り値を無視して使いたいとき
関数の戻り値があるけど、必要ない場合もあります。そのときは代入せずに使ってOKです。
func getNumber() -> Int {
return 42
}
_ = getNumber()
_ =と書くことで、「戻り値はいらないよ」という意味になります。
まとめ
Swiftの関数における戻り値は、ひとつの値だけでなく複数の値を返す設計ができるため、アプリ開発やデータ処理、ユーザー情報の取得、ゲームロジックの判定処理などさまざまな用途で役立ちます。とくにタプル型を用いた複数戻り値は、わかりやすい構造でデータをまとめつつ可読性を高めるため、API連携や構造化データの取得にも応用できます。戻り値はそのまま画面表示に使ったり、別の計算処理に渡したり、状態を判定する条件として利用できる点が非常に便利です。また、関数内部でprintするだけではなく、値を返して再利用することで、ロジックのテストやコードのメンテナンスが容易になります。複数の戻り値を返したいときに配列や辞書を使う方法もありますが、順番で扱うタプルは軽量で扱いやすく、戻り値の型を明確に定義できる利点があります。さらに戻り値に名前をつける記法は読みやすさを向上させ、コード量が多いアプリ開発や保守性が求められるチーム開発で大いに効果的です。たとえばユーザー情報、得点判定、サーバーからのレスポンス解析、ログイン状態とユーザーIDの返却など、複数の情報をひとまとめに扱いたい場面でそのまま活用できます。戻り値を省略できるVoid型も、ログ出力や通知送信など副作用だけを目的とした関数を作成する際に有効です。戻り値を変数として保持しておくことで画面更新に利用したり、結果をストレージへ保存したり、複数の関数間で受け渡したりすることもできます。戻り値を無視する方法として「_ =」を使うことで余計な変数を作らずにロジックを実行できます。これにより、関数をコマンドとして実行したいが結果は不要な場面に対応できます。
実用例:タプルを使ったログイン認証
複数の戻り値を使うと、ログイン処理の結果とユーザー名を同時に返せます。
func loginCheck(user: String, pass: String) -> (Bool, String) {
if user == "hanako" && pass == "1234" {
return (true, "ログイン成功")
} else {
return (false, "ユーザー名またはパスワードが違います")
}
}
let result = loginCheck(user: "hanako", pass: "1234")
print(result.0)
print(result.1)
まとめとして意識したいポイント
- 戻り値は処理結果を返して再利用できる
- タプルを使うと複数の値をまとめて返せる
- 名前付きタプルを使うと可読性が向上する
- Void型は値を返さない関数に使われる
- 戻り値を無視したい場合は
_ =を活用する
生徒
「戻り値って数字や文字だけじゃなくて、複数の情報を返せるんですね!」
先生
「そのとおりです。タプルを使えばひとつの関数で複数の要素をまとめて扱えます。判定とメッセージ、名前と年齢、得点と評価などたくさん応用できますよ。」
生徒
「戻り値を変数に代入して、あとで画面に表示したり別の処理に渡したりできるのが便利ですね!」
先生
「そうです。関数はデータを整理しながら再利用するための基本なので、戻り値の扱いを理解できたのは大きな一歩ですよ。」
生徒
「次は戻り値に構造体を返したり、APIレスポンスをまとめたりする方法も学んでみたいです!」