太郎くんと次郎くんに、それぞれ番号を与えてあげます。
それぞれ出力してみましょう。
とっても普通ですよね。
次郎くんの番号を変更してみます。
出力すると当然結果はこうなります。
人物のデータを管理するためのクラス「Jinbutu」を定義して、その人物の番号を代入する変数numberを用意します。
太郎くんのインスタンスを作ってあげましょう。番号も設定してあげます。
定数TaroにJinbutuクラスのインスタンスが代入されました。
番号を出力してみます。
そして次郎くんに、太郎くんのインスタンスを代入すると・・
この時!次郎くんのインスタンスが新たに生成されるわけではありません。
「次郎くん、あなたのデータについては太郎くんのインスタンスを参照してくださいね。」という感じで、参照先のルート(画像でいうところの矢印)のみが次郎くんに渡されています。
定数Jiroに代入されたのはインスタンスそのものではなく、インスタンスTaroへの参照ルートです。これを「参照値」と言います。
現段階でのTaroとJiroの番号を出力してみましょう。
Taroはインスタンスの実体なので、普通にTaroの変数numberの値を出力します。
JiroにはTaroへの参照値が入っているので、インスタンスTaroにアクセスし、変数numberの値を出力しています。
扨、Jiro.numberに「数値20」を代入してみます。
そうしたとき、Taro.numberはどうなっているのか。
そう。Taro.numberも20になってしまっています。なんで?
2つの定数に代入されている内容は違いますが、結果的にいずれもアクセス先は「Taroインスタンス」として共有されているのです。
したがってJiro.numberに数値を代入した時はこのようになります。
参照先であるTaroにアクセス
▼
Taroの変数numberにアクセス
▼
Taro.numberに20を代入
そう。JiroがインスタンスTaro、その中の変数にアクセスできてしまっているのです。
逆に、Taro.numberの値も変化させてみましょう。
予想通りアクセス先が同じである、Jiro.numberも30となります。
Swiftで「値渡し」「参照渡し」について考えてみました。まとめてみます。
◼︎ 数値や配列など、値そのものを渡すこと。
◼︎ 参照値を渡すことによって、アクセス先を共有させる。
いかがでしたか?理解の手助けとなれば幸いです 🎵
swift、web、ガジェットなど。役立つ情報や観ていてたのしいページを書いていきたいと思います。
🐧 twitter 🐧