1. ホーム
  2. swift

[解決済み] Swiftの定数。構造体か列挙型か

2023-03-18 09:01:36

質問

定数を定義するのに、構造体とenumのどちらがいいのかわかりません。構造体かenumか。構造体は使用するたびにコピーされるのでしょうか?構造体について考えるとき static let を持つ構造体について考えるとき、それが常にコピーされるのは意味がないと私は思います。しかし、それがコピーされないなら、私が何を取るかは重要ではありません?

構造体やenumを選択する利点は何ですか?

FranciscoはStruct'sを使えと言っています。

Ray WenderlichはEnumを使えと言っている。しかし、私は正当な理由に欠ける。

どのように解決するのですか?

構造体も列挙体も動作します。例として

struct PhysicalConstants {
    static let speedOfLight = 299_792_458
    // ...
}

enum PhysicalConstants {
    static let speedOfLight = 299_792_458
    // ...
}

静的プロパティを定義する PhysicalConstants.speedOfLight .

Re: 構造体は使用するたびにコピーされますか?

どちらも structenum は値型なので、列挙型にも適用されるでしょう。しかし、それは とは無関係です。 ここで というのは、値を作成する必要が全くないからです。 静的プロパティ (これは タイプ プロパティとも呼ばれます) は型自体のプロパティであり、その型のインスタンスのものではありません。

Re: 構造体とenumの選択にはどのような利点がありますか?

で述べたように リンク先の記事 :

<ブロッククオート

ケースレス列挙を使用する利点は、誤ってインスタンス化されることがなく、純粋な名前空間として機能することです。

では、構造体の場合。

let foo = PhysicalConstants()

という型の(役に立たない)値を生成します。 PhysicalConstants しかし はケースなしの列挙の場合、コンパイルに失敗します。

let foo = PhysicalConstants()
// error: 'PhysicalConstants' cannot be constructed because it has no accessible initializers