SWIFT構造VSクラス/列挙


熊に与える授業資料。
StructとClassの共通点
  • いくつかの相関値を1つのデータ型に集約する場合、
  • が他のオブジェクトや関数などに渡す場合
  • .
  • インスタンス/タイプメソッド
  • インスタンス/タイプProperty
  • Struct
  • C言語などの構造体よりも多くの機能を有する
  • 継承不可
  • 値タイプ:データ送信時に値をコピーし、
  • を転送する.
  • SWIFTの大部分の骨格は構造体からなる
  • である.
  • Value type:データ送信時に値をコピーし、
  • を転送する.
  • 参照ではなく他のオブジェクトまたは関数に渡すときにコピーする場合、
  • .
  • 自分を継承する必要がない、または他のタイプを継承する必要がない場合
  • .
    Class
  • 、伝統的なOPPの観点から見ると
  • 単一継承(多く継承しない)
  • 参照タイプ:データの転送時に値を提供するメモリ位置
  • Appleフレームワークの大部分のスケルトンはクラス
  • です
    Enum
  • 他言語と異なる列挙型
  • 継承不可
  • 値タイプ:データ送信時に値をコピーし、
  • を転送する.
  • インスタンス/タイプメソッド
  • struct ValueType {
        var property = 1
    }
    
    class ReferenceType {
        var property = 1
    }
    
    // 첫 번째 구조체 인스턴스
    let firstStructInstance = ValueType()
    
    // 두 번째 구조체 인스턴스에 첫 번째 인스턴스 값 복사
    var secondStructInstance = firstStructInstance
    
    // 두 번째 구조체 인스턴스 프로퍼티 값 수정
    secondStructInstance.property = 2
    
    // 두 번째 구조체 인스턴스는 첫 번째 구조체를 똑같이 복사한 
    // 별도의 인스턴스이기 때문에 
    // 두 번째 구조체 인스턴스의 프로퍼티 값을 변경해도
    // 첫 번째 구조체 인스턴스의 프로퍼티 값에는 영향이 없음
    print("first struct instance property : \(firstStructInstance.property)")    // 1
    print("second struct instance property : \(secondStructInstance.property)")  // 2
    
    
    // 클래스 인스턴스 생성 후 첫 번째 참조 생성
    let firstClassReference = ReferenceType()
    // 두 번째 참조 변수에 첫 번째 참조 할당
    let secondClassReference = firstClassReference
    secondClassReference.property = 2
    
    // 두 번째 클래스 참조는 첫 번째 클래스 인스턴스를 참조하기 때문에
    // 두 번째 참조를 통해 인스턴스의 프로퍼티 값을 변경하면
    // 첫 번째 클래스 인스턴스의 프로퍼티 값을 변경하게 됨
    print("first class reference property : \(firstClassReference.property)")    // 2
    print("second class reference property : \(secondClassReference.property)")  // 2
    struct SomeStruct {
      // 프로퍼티 생성
      var someProperty: String = "Property"
    }
    
    // 인스턴스 생성
    var someStructInstance: SomeStruct = SomeStruct() 
    
    func someFunction(structInstance: SomeStruct) {
      // structInstance 값을 복사되어서 전달
      var localVar: SomeStruct = structInstance
      localVar.someProperty = "ABC"
    }
    
    someFunction(someStructInstance)
    print(someStructInstance.someProperty) // "Property"
    // 값 변화 없음
    
    Class SomeStruct {
      // 프로퍼티 생성
      var someProperty: String = "Property"
    }
    
    // 인스턴스 생성
    var someStructInstance: SomeClass = SomeClass() 
    
    func someFunction(classInstance: SomeClass) {
      // classInstance 참조해서 메모리 위치를 전달
      var localVar: SomeClass = structInstance
      print(localVar.someProperty) // Property
      localVar.someProperty = "ABC"
    }
    
    someFunction(someClassInstance)
    print(someClassInstance.someProperty) // "ABC"
    // 값 변화 있음
    SWIFTでの使用
  • SWIFTのすべての基本データ型は構造化された形式を採用している.
  • SWIFTのすべての基本データ型は構造化された形式を採用している.
  • スイスは特に構造体と列挙式を使用するのが好きだ.
  • Appleフレームワークの多くはクラスを使用しています.
  • 構造体/クラスの選択と使用は開発者が担当する.