0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Swift 12 structとenum

Posted at

一見するとstructとclass似ているように見えますが、どの様なものを使うべきかを決定する時には、理解しなければならない違う点があります。
今度の章には、structをどうやって宣言すると使用するかを説明して、stuctとclassの違う点について調べます。また、value typeとreference typeに関する概念を説明します。

十二・壱 struct{}Class{}は似ている

structも Class{}みたいなObject様な機能を使えます。
例え、機能を再利用するObjectでカプスルか方法を提供し、
Struct宣言は Class{}と似ていますが、使うkeywordが違います。
Screenshot 2023-10-19 at 2.21.08 PM.png
let = Instance(:)生成も同じです。意外にも拡張や : Protocol採択や{init{}}する事ができます。まず、valueTypeとrefereceTypeについてしてみよう。

十二・弐 Sturct

弐・甲  Class{}Struct{}InstanceValue Type

Struct{}InstanceValueTypeですけど、
Class{}Instance<<Reference<<Type`です。

弐・乙 StructInstanceValueType

Struct Instanceがコピーされたり、Method()に伝達する時に、Instanceの実際コピが生成されながら原本のObjectが持っているデータをこぴして取ります。つまり、copy本を別個の自身のデータを持つといす事です
実際に実行中アフリのStruct Instanceに対するCopyが複数存在することができ、それぞれのCopyは自身のデータを持って一つのInstanceを変更しても他のInstanceには影響与えない。

弐・丙 StructInstanceValueType

これと逆に、InstancecopyされるとかArgumentで伝達されると該当Class Instance(){ }があるメモリの位置に対する<<Reference<<が作られるとか伝達されます。
<<Reference<<を変更すれば原本InstanceにもをなじTaskが実行されます。
つまり、ただ一つのClass Instance(){ }が存在して、そのInstanceを指す色んな<<Reference<<が存在する事です。
<<Reference<<の一つを使えてInstanceDataを変更すると全てのデータが変更されます。

弐・丁 例題

Screenshot 2023-10-19 at 4.52.40 PM.png
Screenshot 2023-10-19 at 4.57.17 PM.png

弐・戊  Class{}はできますけど、Struct{}ができない事と

Struct{}subClass{}とかinheritをサポートしません
言い直して、他のStruct{}inheritできません。
他にも、{deinit{}}を含まる事ができません。
最後に、Run Timeで  Class Instance(){ }Typeを識別することができますが Struct{}そうではありません。

弐・己 Struct{}Class{}はいつ使いますか

一般的にStruct{}Class{}より効率的し、MultiThreadコードを使用するともっと安定的で、できればStruct使用を進めます。
だが↓inheritが必要とか、テータがカプスル化された一つのInstanceが必要な時には Classを使用するべきです。
最後に、Instanceが消滅するときリソースを確保する為の Classを使う。

十二・参 Enum

参・甲 enumについて

? enumerate : mention (a number of things) one by one.
~ Latin enumerat- ‘counted out’, from the verb enumerare,

此れは、事前定義されたvalue =の集合で構成された使用者指定データターフを作るのに使用されます。
Enumerationは一般的に'Switch Syntaxを使用する時にも使います。

enum Temperature {
    case hot
    case warm
    case cold
}

valueが割り当てない場合いそのタープのenum{}は基本的に先に定義された状態の一つを参照するために使用されます。

func displayTempInfo(temp: Temperature) {
    switch temp {
        case .hot:
        print("It is hot")
        case .warm:
        print("It is warm")
        case .cold:
        print("It is cold")
    }
}

enumには有効するmemberの最終集合があるのでSwitchSyntaxdeaultを含める必要がないことです。
SwitchSyntaxをとして有効できない enum{}caseを伝達すればRunTimeErrorが起こる可能性がある前にCompilerによって捕捉される。

enum{}をテストすると、次の3つが可能な状態中の1つが選ばれたTemperatrueのenum{}InstanceをdisplayTempInfofunc(){ }に伝達するべきだ

Temperature.hot // instance
Temperature.warm// instance
Temperature.cold// instance

displayTempInfo(temp: Temperature.warm) //run 
>> It is warm

enum{}内の個別のcaseには接続されたvalue = があるかも知れない
例え、coldのenum{}Caseが tempと接続されなければappが寒さと凍結を区別できるとしましょう。此れは次の様にenum{}宣言内で定義できます。

enum Temperature {
    case hot
    case warm
    case cold(centigrade: Int)
}

これを通じて、Switch Syntaxは次の様にcoldcaseのTemperatureも確認できます。

func displayTempInfo(temp: Temperature) {
    switch temp {
        case .hot:
        print("It is hot")
        case .warm:
        print("It is warm")
        case .cold(let centigrade) where centigrade <= 0:
        print("Ice warning: \(centigrade) degrees.")
    case .cold:
        print("It is cold but not freezing")
    }
}

displayTempInfo(temp: Temperature.cold(centigrade: -10))
>> Ice warning: -10 degrees 

要約

Swift Struct{}Class{}{Property = }を定義して、valueを保存します。{method()}を定義できる(Object: )生成メカニズムを提供します。二つのメカニズムが似たいる様ですけど、StructInstanceClassInstancecopyされるとか伝達する時には大事な違う点を見せます。
Class<<reference<< :Type :Objectで具別されるですけど、
Structvalue = :Typeで具別されます。
struct{Instance{}}copyされるとか{method()}で伝達されば元々の Class{Instance{}}を指す<<reference<<ができます。
Class{}だけが持つ固有の機能はinheritとdeinitを支援することで、Runtimeで Class{}Typeを識別できることです。
enum{}は前に定義されたcase: value集合で構成された使用者指定タイプを作るために使用されて、特にSwitch Syntax内でCaseを識別する為に使用されます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?