0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

値型と参照型

Last updated at Posted at 2024-01-21

値型と参照型について説明します。

値型

値型の変数はデータを直接格納します。
構造体、列挙型が値型になります。

var a = "apple"

//変数bにaを代入する
var b = a

ゲームのヒィールド上にaという名前でりんごが召喚される(インスタンス化)
りんごが複製されて、bという名前でヒィールド上に召喚される
ヒィールド上にりんごが2個置かれている状態

ヒィールド上に実体化した🍎がそれぞれ存在しているので、どちらかの値を変化させても影響しないのが値型の特徴です。代入の際に値がコピーされるのが値型になります。

var a = "apple"
var b = a
//変数aにbananaを代入する
b = "banana"

print(("a:\(a)")
print("b:\(b)")

- - - - - - - - - - - - - - - - - - - - -
a:apple //b = bananaによって影響は受けない
b:banana

参照型

参照型の変数はデータ (オブジェクト) への参照を格納します。
クラスが参照型になります。

// フルーツクラス作成する
class Fruit {
    var name: String
    
    init(name: String) {
        self.name = name
    }
}

var a = Fruit(name: "apple")
// bにaを代入
var b = a

// 変数aのインスタンスのnameプロパティをbananaに変更する
a.name = "banana"

print("a: \(a.name)")
print("b: \(b.name)")

- - - - - - - - - - - - - - - - - - - - -
a:banana //b = bananaによって変更されている
b:banana

ゲームのヒィールド上にaという名前でりんごが召喚される(インスタンス化)
りんご自体は複製されず、りんごが召喚された座標がコピーされる
ヒィールド上にりんごが1個置かれている状態

代入の際に値ではなく、データ自体への参照先を渡すのが参照型
変数aの参照先が変数bにコピーされているため、a.name = "banana"で変数aの値を変えた場合でも変数bが参照している座標は同じであるため、値の変更に影響を受けてしまう。

※ここでの参照とはデータ自体が保存されているメモリ上の領域のアドレスのことを指す。

まとめ

変数、定数をコピーしたときに値型と参照型に違いがある。

値型:インスタンスがコピーされる
参照型:参照先がコピーされる

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?