🗂

Swift 構造体について メモt

に公開

構造体の特徴

・値型である
※クラスは参照型で、伝承が可能。構造体は伝承不可。
・複数の変数・定数をプロパティとして、(構造体名)でまとめることができる
・インスタンスを生成して、同じ構造のデータを複製することができる

値型である

・値型は、変数の値を参照するのではなく、直接値をもつ型のことを、値型という。変数や定数に値が代入されたとき、または関数が実行された時に、
"新たに値がコピーされてメモリ領域を確保する"
・複数のインスタンスで値を共有することはなく、一度代入された値は再代入をしない限りは不変。

値型の例

struct Point {
  var x: Double
  var y: Double

  mutaing func moveBy(dx: Doble, by: Doble) {
    x += dx
    y += dy
  }
}

//インスタンスの作成
var originalPoint = Point(x: 3.0, y:4.0)

//originalPointを新しい変数にコピー

var copiedPoint = originalPoint→ここで新たなインスタンスを作成している

//copiedPointを移動
copiedPoint.moveBy(dx:2.0,dy: 3.0)
//値型のため、originalPointはインスタンスを作成した時の値
print("Original Point: \(originalPoint)") // Output: Original Point: Point(x: 3.0, y: 4.0)
print("Copied Point: \(copiedPoint)")     // Output: Copied Point: Point(x: 5.0, y: 7.0)

という感じで
originalPointとcopiedPointの二つの構造体のインスタンスを作成しています。

さらに例

Struct Person1 {
var firstName: String = "bipen"
var lastName: String = "kumal"
var age: Int = 32
}
//Person1のインスタンスを生成
var myPerson1 = Person1()

Struct Person2 {
var firstName: String
var lastName: String
var age: Int
}
var myPerson = Person2(firstName:"negi"lastName:"abatal",age:25)
print("Person1: \(myPerson1.firstName) \(myPerson1.lastName), Age: \(myPerson1.age)")
print("Person2: \(myPerson2.firstName) \(myPerson2.lastName), Age: \(myPerson2.age)")

//出力結果
Person1: bipen kumal, Age: 32
Person2: negi abatal, Age: 25

ここで覚えておきたいことは〜
構造体は、クラスと違い、伝承が不可能。
複数のインスタンスで値を共有することはない。
一度代入された値は再代入されない限り不変。

Discussion