[Swift]デフォルト構文-構造とクラス


使用するためにデータを整理する場合は、構造体とクラスが便利です.
さらに、Propertyとメソッドを使用して構造化されたデータと機能を得ることもできます.
違いは、構造体のインスタンスが値タイプであり、クラスのインスタンスが参照タイプであることです.

こうぞうたい


構造体はstructと定義されています!
struct 구조체 이름 {
    프로퍼티와 메서드들
}
上記のルールで構造体を作成します!
struct IanInformation {
    var name: String
    var age: Int
}

構造インスタンスの作成と初期化


完体を作成してインスタンスを作成して初期化する場合は、デフォルトで作成されたメンバーとアルファベットのライフサイクルを使用します.
インスタンスの作成と初期化後にProperty値にアクセスする場合は、句点.を使用します.
構造を定数letと宣言した場合、インスタンスのプロパティ値は変更できませんが、変数varと宣言した場合は変更できます.
struct IanInformation {
    var name: String
    var age: Int
}

var ian: IanInformation = IanInformation(name: "ian", age: 12)
ian.name = "이안!"
ian.age = 19

let ian2: IanInformation = IanInformation(name: "ian2", age: 100)
ian2.name = "상수이므로 변경 불가 !" // 상수이므로 변경 불가
ian2.age = 1 // 상수이므로 변경 불가

カテゴリ


クラスの定義方法とインスタンスの作成方法
クラスを定義するときにキーワードclassを使用します.
class 클래스 이름 {
    프로퍼티와 매서드
}
レベルには継承可能なフィーチャーがあります
継承の方法.
class 클래스 이름: 부모 클래스 이름 {
    프로퍼티와 매서드
}
上記のルールを使用してクラスを作成します.
class Person {
    var height: Float = 0.0
    var weight: Float = 0.0
}

クラスインスタンスの作成と初期化


クラスを定義した後、インスタンスを作成および初期化する場合は、デフォルトの頭文字ライフサイクルを使用します.
インスタンスの作成と初期化後にProperty値にアクセスする場合は、句点.を使用します.
構造体とは異なり、クラスのインスタンスは参照タイプであるため、クラスのインスタンスを定数letとして宣言すると、内部プロパティ値を変更できます.
class Person {
    var height: Float = 0.0
    var weight: Float = 0.0
}

var ian: Person = Person()
ian.height = 150.0
ian.weight = 100.0

let ian2: Person = Person()
ian2.height = 112.2
ian2.weight = 122.2

クラスインスタンスの消失


クラスのインスタンスは参照タイプで、さらに参照する必要がない場合はメモリから解放されます.
参照タイプ:データが転送されると、値のメモリ位置が転送されます.後でもっと詳しく知ります.
このプロセスを破棄と呼び、破棄する前にdeinitメソッドを呼び出します.クラスにおいてdeinitメソッドが実施される場合、deinitメソッドは、そのメソッドが消失する前に呼び出される.このように呼び出されるdeinitメソッドを디이니셜라이저と呼ぶ!各クラスは1つのdeinitメソッドしか実装できず、パラメータと戻り値を持つことはできません.
class Person {
    var height: Float = 0.0
    var weight: Float = 0.0
    
    deinit {
        print("Person 클래스의 인스턴스가 소멸됩니다 ! ")
    }
}

var ian: Person? = Person()
ian = nil // Person 클래서의 인스턴스가 소멸됩니다 !
通常、deinitメソッドは、インスタンスがメモリから解放される前に処理するコードを格納します.
たとえば、インスタンス破棄前にデータを格納したり、他のオブジェクトインスタンス破棄を通知したりする必要がある場合は、deinitの方法を実装する必要があります.

構造とクラスの違い


構造体とクラスには多くの類似点がある.
  • を格納するためにPropertyを定義することができる.
  • 機能を実行する方法
  • を定義することができる.
  • サブスクリプト構文により、サブスクリプトを定義して、構造体またはクラスが持つ値(property)にアクセスできます.
  • の初期化時の状態を指定するために、頭文字Liser
  • を定義することができる.
  • は、拡張に拡張することによって、新しい機能を追加し、
  • を初期実装することができる.
  • 特定の機能を実行するために、特定のプロトコル
  • を遵守することができる.
    確かに違いがある.
  • 構造体
  • を継承できない.
  • 型鋳造は、クラスインスタンス
  • にのみ適用する.
  • デジタル署名は、クラスのインスタンスでのみ使用できます.
  • 参照カウントはクラスインスタンス
  • にのみ適用される.

    値タイプと参照タイプ


    構造体は値タイプ
    クラスは参照タイプです.
    価値型と参照型の大きな違いが무엇이 전달되느냐だと思ったら、気持ちがいいです!

    値タイプのデータを関数の伝達パラメータとして伝達すると、メモリに新しい伝達パラメータインスタンスが作成されます.
    渡す値は、作成した新しいインスタンスにコピーされます.
    一方、参照タイプのデータが伝達パラメータとして伝達されると、既存のインスタンスの参照が伝達され、新しいインスタンスではなく既存のインスタンスの参照が伝達されます.

    構造体とクラスの選択と使用


    構造体とクラスは、新しいデータ型を定義し、機能を追加します.
    ただし、構造インスタンスは常に値タイプであり、クラスインスタンスは常に参照タイプである.育ちは悪くないが、用途は違う!
    このガイドの1つ以上の条件が適用される場合は、構造体を使用することをお勧めします.
    パッケージ
  • に関連する単純値セット
  • を目的とする.
  • 参照パッケージの値よりもコピーが適切である場合、
  • .
  • 構造体に格納プロパティが値タイプであり、参照よりもコピーが適切である場合、
  • .
  • 他のタイプから継承する必要がない場合または自分で継承する必要がない場合
  • .
    出典:Sweet Programming(野熊)、iOSプログラミングのSweet基礎(野熊)