構造体:Bool、Int、Double、String、Array、Dictionaryなどよく見られるタイプが構造体です
構造体には、コンパイラが自動的に生成する初期化器(initializer、初期化方法、コンストラクタ、構造方法)がある.
コンパイラは、状況に応じて構造体にg個以上の初期化器を生成する可能性があり、すべてのメンバーに初期値があることを保証する.
構造体を定義ときに構造体内で初期化器をカスタマイズすると、コンパイラjはtの他の初期化器を生成しない.
内部のメモリ構造は連続的であり、実際の占有量はメンバーのメモリサイズであり、割り当てはメモリ整列を見る.
struct Point {
var x: Int
var y: Int = 1
var z: Int?
}
struct Point1 {
var x: Int
var y: Int
init() {
x = 0
y = 0
}
}
struct Point2 {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
クラス#クラス#
クラスの定義は構造体と類似しているが、コンパイラはメンバ値初期化器に入力可能なメンバー値を生成していない.
クラスのすべてのメンバーは定義時に初期値を指定し、コンパイラはパラメータのない初期化器を生成し、メンバーの初期化はこの初期化器でを完了する.
構造体とクラスの違い
構造体は値タイプ(列挙も同様)、クラスは参照タイプ(ポインタタイプ)である
値のタイプ
値タイプlet、varに値を付与、または関数にパラメータを渡す場合、すべてのコンテンツを直接コピーし、深いコピーに属する.
Swift標準ライブラリで性能を向上させるため、String、Array、Dictionary、SetはCopy On Writeの技術を採用している(「書く」操作がある場合のみコピー操作を行う)参照タイプ
参照タイプlet、varに値またはパラメータを付与するのは、格納メモリアドレスをにコピーすることである.