Swift 5構造体とクラス


構造体: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に値またはパラメータを付与するのは、格納メモリアドレスを
  • にコピーすることである.