カテゴリ: Swift 更新日: 2026/02/05

Swiftのinout引数の使い方と注意点を徹底解説!初心者でも理解できる変数の書き換え方法

Swift inout引数の使い方と注意点
Swift inout引数の使い方と注意点

先生と生徒の会話形式で理解しよう

生徒

「Swiftで関数の中で変数の値を変更したいときって、どうすればいいんですか?」

先生

「その場合はinout引数を使うと便利ですよ。関数の外の変数を直接変更できます。」

生徒

「関数って普通、中の処理だけで完結するものじゃないんですか?」

先生

「確かにそうですが、inoutを使うと、関数の外にある変数を“直接”書き換えることができるんです。詳しく説明していきましょう!」

1. Swiftのinout引数とは?

1. Swiftのinout引数とは?
1. Swiftのinout引数とは?

inout引数とは、関数の引数として渡した変数の「元の値」を関数の中で変更するための仕組みです。通常の関数は、変数のコピーを受け取って処理するため、関数の外の変数には影響を与えません。

ですが、inoutを使うと、関数の中で値を変えた結果が、関数の外に反映されるようになります。まるで「箱ごと」渡して中身を書き換えるようなイメージです。

2. inout引数の書き方と使い方

2. inout引数の書き方と使い方
2. inout引数の書き方と使い方

inout引数は、関数の引数の前にinoutキーワードをつけて定義します。そして、関数を呼び出すときには、引数に&(アンパサンド)をつけて渡します。


func addTen(to number: inout Int) {
    number += 10
}

var myNumber = 5
addTen(to: &myNumber)
print(myNumber)

15

この例では、変数myNumberを関数addTenに渡して、値を直接書き換えています。関数の外でもmyNumber15に更新されていますね。

3. inoutを使うメリット

3. inoutを使うメリット
3. inoutを使うメリット

inout引数を使うことで、複数の値を関数の中で更新したいときに、戻り値を増やさずに簡潔に書けます。

たとえば、2つの変数の値を入れ替える関数もinoutで実現できます。


func swapValues(_ a: inout Int, _ b: inout Int) {
    let temp = a
    a = b
    b = temp
}

var x = 10
var y = 20
swapValues(&x, &y)
print("x: \(x), y: \(y)")

x: 20, y: 10

このように、inoutを使えばスッキリしたコードで変数を入れ替えられます。

Swiftを基礎から実践レベルまで学びたい人や、 iOSアプリ開発を本格的に始めたい人には、 定番の入門+実践書がこちらです。

Swift実践入門をAmazonで見る

※ Amazon広告リンク

4. inoutを使うときの注意点

4. inoutを使うときの注意点
4. inoutを使うときの注意点

inout引数にはいくつか注意が必要です。正しく使わないと、予期しない動作やエラーの原因になります。

  • 定数(let)は渡せない:変更が前提なので、定数は使えません
  • 同じ変数を複数のinoutに同時に渡せない:競合してバグの原因になります
  • 関数の戻り値ではなく、引数側で値が変わる:呼び出し方に注意しましょう

例えば、以下のようなコードはエラーになります:


let a = 5
addTen(to: &a) // エラー!定数を渡している

inoutではvar(変更可能な変数)を使う必要があります。

5. inoutを使う場面とは?

5. inoutを使う場面とは?
5. inoutを使う場面とは?

inout引数は以下のような場面で役立ちます:

  • 複数の値を一括で変更したいとき
  • 複雑なデータ構造を直接変更したいとき
  • パフォーマンスを考えて値のコピーを避けたいとき

ただし、初心者のうちはinoutを多用するよりも、戻り値で結果を返す方法の方が分かりやすいこともあります。使いどころを見極めて使いましょう。

6. inoutを使わない方法との比較

6. inoutを使わない方法との比較
6. inoutを使わない方法との比較

inoutを使わない場合は、関数の戻り値を使って値を返します。たとえば、次のように書き換えることができます。


func addTenReturn(_ number: Int) -> Int {
    return number + 10
}

var myNumber = 5
myNumber = addTenReturn(myNumber)
print(myNumber)

15

このように、inoutを使わずに「新しい値として返す」方法も安全でわかりやすいので、初心者にはおすすめです。

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語の短絡評価(ショートサーキット)を使った条件式の工夫をやさしく解説!初心者でも理解できる基本知識
New2
Go言語
Go言語の構造体の初期化パターンとコンストラクタ的関数の書き方を徹底解説!初心者でもわかる基本と実用例
New3
Kotlin
Kotlinの例外処理とキャンセルの連携を完全ガイド!初心者でもわかるCoroutineExceptionHandlerの使い方
New4
Go言語
Go言語のクロージャとは?関数内関数の活用例と仕組み
人気記事
No.1
Java&Spring記事人気No1
Kotlin
KotlinのChannelでデータをやり取りする方法を完全ガイド!初心者にもわかる非同期通信の基本
No.2
Java&Spring記事人気No2
Go言語
Go言語でのDB接続情報を環境変数で管理する方法|初心者でも安全に設定
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Kotlinのビルド設定エラーと解決法まとめ!初心者向けGradleトラブル対処ガイド
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Kotlin
Kotlinでテキスト表示・編集!初心者でもわかるTextViewとEditTextの使い方
No.7
Java&Spring記事人気No7
Kotlin
Kotlin DSLとGroovy DSLの違いをやさしく解説!初心者でもわかるGradleスクリプトの使い分け
No.8
Java&Spring記事人気No8
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方

💻 作業効率アップに

ノートPCを縦置きしてデスクを広く。
省スペースで片づく定番スタンド

UGREEN 縦型スタンドをAmazonで見る

※ Amazon広告リンク