🗂
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