LoginSignup
21
23

More than 5 years have passed since last update.

[Swift]値渡しと参照渡しでこけたのでメモった

Last updated at Posted at 2014-12-25

俺の名はケンヤ。難事件をいくつも迷宮入りさせたニート。しかし ある時謎の組織に入社し薬を飲まされ身体が縮んで Braian になっちゃった。

そもそも値渡しとか参照渡しって何?

簡単にまとめると、、、
「値渡し(call by value)」とは変数の値をコピーする渡し方
「参照渡し(call by reference)」とは変数を共有する渡し方
え、、、(錯乱)と、とりあえず進む

値渡し: 変数の値をコピーする渡し方

let a = [1, 2, 3]
var b = a
b[0] = 100
//  a[0]は100ではなく1のまま

上記のはbはaから要素をコピーして作られた、aとは別のミュータブルなArray(配列)となる。つまり aにはbの変更は反映されない

letで宣言: イミュータブル(不変)
let b = [1, 2, 3]
b[0] = 100
// コンパイルエラー

varで宣言: ミュータブル(可変)
var a = [1, 2, 3]
a[0] = 100
// [100, 2, 3]

参照渡し: 変数のメモリのadress(住所)を渡す

下記ではSwiftが参照渡しだったと仮定します。
(本来はSwiftは値渡し)

let a = [1, 2, 3]
var b = a
b[0] = 100
// a[0]は100
//(注)値渡しの場合は1のままだった

つまり参照渡しは値渡しと異なりコピーではく、adress(メモリの住所)を渡し共有しているのです。

下記はclassとstructの参照渡し、値渡しの例です。

このほかに
Swiftでポインタを使用する方法
参照の値渡し、値の参照渡し
変数の実態がメモリ領域ってどういうこと?
などもかければなーと思います。

まだまだ不束者ですので不備や修正など、ご教授のほうよろしくお願いします!!

21
23
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
23