SWIFT3 inout引数について

inout引数についてまとめる。

ちなみにこれはiosアプリ開発集中講座という本である。

Day1-4音楽アプリを作ろう。

の解説になります。

 

まずソース

  // ギターがタップされた時の処理

@IBAction func guitar(_ sender: Any) {

        //&で渡している

        soundPlayer(player: &guitarPlayer, path: guitarPath, count: 0)

    }

    

    // Playボタンがタップされた時の処理

    @IBAction func play(_ sender: Any) {

        soundPlayer(player: &backmusicPlayer, path: backmusicPath, count: -1)

    }

    

    // Stopボタンがタップされた時の処理

    @IBAction func stop(_ sender: Any) {

        // バックミュージック停止 止めるためにinout

        backmusicPlayer.stop()

 //ここで外で利用している

    }

    

    // 共有のプレイヤー再生処理

    fileprivate func soundPlayer(player:inout AVAudioPlayer , path:URL , count:Int) {

//Q質問ここになぜinoutがあるのか?

        do {

            player = try AVAudioPlayer(contentsOf: path, fileTypeHint: nil)

            player.numberOfLoops = count

            player.play()

        } catch {

            print("エラーが発生しました!")

        }

    }

イン・アウト引数とは

関数内での引数への再代入を関数外へ反映させるためにイン・アウト引数を利用する

ここではplayer = try AVAudioPlayer(contentsOf: path, fileTypeHint: nil)

にて引数に再代入をしている。

これがあるために,イン・アウト引数にする。

メモリのアドレスを、参照渡し、しているわけだ。

 

参照渡しなので、再代入でもエラーにならない。

解説の本には、returnで戻り値を戻さなくても、戻り先で利用できます。

と記載されている。

どこで利用できるかというと、      backmusicPlayer.stop()

である。

バックミュージックを停止している。

これは関数外で利用してる一つである。

inは同時再生ということか

そんな事しなくても、中でインスタンス作っているので、関係ないといえば、関係ないはず。

そこへ無理ヤリインスタンスを代入している。

そのために、inout引数が必要。