[Swift]構造とクラス

7490 ワード

実は今生が忙しいので、ずっと趣味のiOSとSWIFTを置いています.
やると決めたからには、もっと深くやりたいので、基本的な仕事から始めることにしました.
暇なときにYabomのスイッチングプログラミングで覚えておきたい大切なものを整理してネットにアップしたい.

Summary


こうぞうたい

  • valueタイプ
    -ARCによってメモリが解放されていない参照カウントを計算する必要がない
  • structキーワード
  • を使用
  • 拡張の新機能
  • サブスクリプト、アクセス可能構造体プログラム
  • カテゴリ

  • 参照タイプ
    -参照カウントを計算する必要があります(ARCでメモリを無効にします)
  • 循環引用整理引用関係
  • が必要である.
  • classキーワード
  • を使用
  • 拡張可能
  • 型鋳造
  • Denitで解除可能
  • こうぞうたい


    SWIFTでは、structキーによって構造体が定義されます.
    struct 구조체이름 {
    	프로퍼티 & 메소드
    }
    本の構造体定義の例を簡単に見てみましょう.
    struct BaisicInformation {
    	var name: String
        var age: Int
    }
    この構造体は
  • Stringタイプのname
  • Intタイプの年齢
  • 名前の会社を持っています.
    構造体の定義は非常に簡単です.
    したがって、使用方法を説明する必要があります.次に、構造体インスタンスの作成と初期化について説明します.
    構造体定義が完了すると、インスタンスを作成および初期化するときに、デフォルトでは「メンバー」および「省略」が使用されます.(ちなみにClassではメンバーや頭文字Liserは提供されていません)構造体で基本的に生成される頭文字Liserのパラメータは、構造体のPropertiesに基づいて自動的に指定されます.
    var yagomInfo : BaisicInformation = BaisicInformation(name: "yagom", age: 99)
    yagomInfo.age = 100
    yagomInfo.name = "seba"
    インスタンスの作成と初期化後にPropertyにアクセスする場合は、ピリオドでアクセスできます.

    カテゴリ


    sweeftでは、親がなくても独立してクラスを定義できます.
    定義時にclassキーを使用します.
    class 이름{
    	프로퍼티들
    }
    クラスを定義する方法から見ると,上の構造体と非常に似ている.
    ただし、クラスは継承可能であり、継承する場合は、親クラスの名前を示すためにクラス名の後にコロンを付ける必要があります.
    class 클래스 이름: 부모 클래스 이름 {
    	프로퍼티, 메소드 들
    }
    クラスを定義した後、インスタンスを作成する場合は、デフォルトのアルファベットタイルを使用します.
    class Person {
    	var height: Float = 0.0
        var weight: Float = 0.0
    }
    たとえば、PersonクラスはPropertyのデフォルト値を保存し、初期値を別途渡す必要はありません.
    インスタンスの作成と初期化後(アルファベットの後)にProperty値にアクセスする場合は、同じように句点を使用してアクセスできます.

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


    クラスのインスタンスは参照タイプに相当します.
    参照を必要としない場合は、メモリから解除する必要があります.これを破棄と呼びます.
    消える前に、クラスはdenitと呼ばれるメソッドを呼び出します.
    このように呼び出したDenitはクラスごとに1つしか実現できず,パラメータと戻り値を持つ.
    class Person {
    	var height: Float = 0.0
        var weight: Float = 0.0
        
        deinit {
        	print("Person 클래스의 인스턴스 소멸.")
    	}
    }
    
    var yagom: Person? = Person()
    yagom = nil // => Person 클래스의 인스턴스 소멸. 메세지 출력
    通常、Denitメソッドには、インスタンスがメモリから解放される前に処理する必要があるコードが含まれます.
    たとえば、インスタンスが破棄される前にデータを保存するか、他のオブジェクトインスタンスに破棄を通知する必要があります.

    swiftでの構造体とクラスの違い


    共通点

  • の値を保存するには、Propertyを定義して使用します.
  • 機能を実行する方法を定義できます.
  • サブスクリプト構文により、サブスクリプトを定義して、構造体またはクラスが持つ値にアクセスできます.
  • が初期化されると、頭文字Liserを定義して状態を指定できます.
  • の初期の実施に伴い、拡張によって新しい機能が追加される.
  • は、特定の機能を実行するために特定のプロトコルを遵守することができる.
  • 差異

  • 構造体は継承できません.
  • タイプcastingでは、クラスインスタンスのみが許可されます.
  • デジタル手書きペンはクラスのインスタンスでのみ使用できます.
  • 参照カウントは、クラスのインスタンスにのみ適用されます.
  • 実際,このように冗長に書かれているが,クラスと構造体の最大の違いはタイプであると考えられる.
  • 構造体-値タイプ
  • クラス-参照タイプ
  • このように定義します.
    では、値と参照型の違いを見てみましょう.
    この2つの最大の違いは何がどのように伝えられているのか.
    たとえば、[値タイプ](Value Type)の[値](Value)を関数の伝達パラメータとして伝達する場合、伝達する値は[コピー](Copy)に伝達されます.
    逆に、参照タイプは値をコピーするのではなく、参照を渡します.
    参照タイプは値をコピーせずに参照を渡すため、値比較ではなくインスタンス間で参照比較を行う必要がある場合があります.この場合、識別演算子を使用できます.
    var yagom: Person = Person()
    let friend: Person = yagom
    let anotherFriend: Person = Person()
    
    print(yagom === friend) // true
    print(yagom === anotherFriend) // false
    print(friend !== anotherFriend)  // false