列挙型からのクラスパラメータ

アレックス・リスティッチ

列挙型とクラスを一緒に使用する方法について質問があります。

次のことを考慮してください。

enum parameter {
    case agility
    case strength
    case mind
}

struct heroParameters {
    let maxInitialParam: UInt32! = 10

    var agility: UInt32!
    var strength: UInt32!
    var mind: UInt32!

    init() {
        self.agility = arc4random_uniform(self.maxInitialParam)
        self.strength = arc4random_uniform(self.maxInitialParam)
        self.mind = arc4random_uniform(self.maxInitialParam)
    }
}

class Hero {
    var parameters: heroParameters!

    required init() {
         self.parameters = heroParameters()
    }

    func setParameter(parameterName: parameter, _ value: UInt32) {
         // ?
    }
}

私が持っている質問は、パラメータのリストを変更する必要がある場合に備えて、上記の列挙型から構造体変数のリストを適切に設定する方法はありますか?

一般に、すべて別々の列挙型にリストされている未知の量の変数で構成される構造体を初期化する方法はありますか?

いずれにせよ、私は完全に間違った方法で考えている可能性があり、これらを適切に処理する方法を理解する必要があります。

バカワマ

辞書を使用して、パラメータをに保存できますHeroParameters列挙Parameter型のrawValueタイプをInt、にHeroParametersすると事前にいくつあるかを知らなくても、すべての列挙型のデフォルト値を作成できます。

これが機能するのは、が最大数の列挙に達するParameter(rawValue:)と戻りループが終了するためです。nilrawValuewhile

enum Parameter: Int {
    case agility
    case strength
    case mind
}

struct HeroParameters {
    let maxInitialParam: UInt32 = 10

    var parameters = [Parameter: UInt32]()

    init() {
        var rawValue = 0
        while let parameter = Parameter(rawValue: rawValue) {
             parameters[parameter] = arc4random_uniform(maxInitialParam)
             rawValue += 1
        }
    }
}

class Hero {
    var parameters = HeroParameters()

    func setParameter(parameterName: Parameter, _ value: UInt32) {
        parameters.parameters[parameterName] = value
    }
}

コメントでの@vadianの優れた提案に従って、Hero添え字を使用してパラメーターを設定/取得する機能を使用してクラスを定義できます

class Hero {
    var parameters = HeroParameters()

    subscript(key: Parameter) -> UInt32 {
        get { return parameters.parameters[key]! }
        set { parameters.parameters[key] = newValue}
    }
}

次に、あなたは素晴らしいクリーンな解決策を持っています:

let hero = Hero()

hero[.agility] = 3
hero[.strength] = 7

print(hero[.strength])  // "7"

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

テンプレートパラメータを指定せずに、クラステンプレートのスコープから列挙型を使用する

分類Dev

コンストラクターのパラメーターとして列挙型クラスを渡す

分類Dev

テンプレートパラメータとして列挙型を使用してc ++のテンプレートクラスから継承

分類Dev

列挙型パラメーターからTypescript関数の戻り値の型を推測する

分類Dev

列挙型コンストラクターからスーパーコンストラクターを呼び出せないのはなぜですか?

分類Dev

ループから列挙型パラメーターを渡す方法は?

分類Dev

Web APIで列挙型パラメーターを渡すためのベストプラクティス

分類Dev

Web APIで列挙型パラメーターを渡すためのベストプラクティス

分類Dev

Scala:コンストラクターに列挙型とその列挙型をパラメーターとして受け取る関数を与える

分類Dev

任意の列挙型を取ることができるテンプレート(非型)パラメータークラスを作成できますか?C ++ 11

分類Dev

列挙型の配列のパラメーター化?

分類Dev

列挙型の共用体タイプのパラメーター?

分類Dev

Java:メソッドパラメータのジェネリック列挙型

分類Dev

クラスから列挙型メンバーにアクセスする

分類Dev

コンストラクターを作成し、別のクラスから列挙型引数を取ります

分類Dev

Swiftのパラメーターとして列挙型のクロージャを使用できますか?

分類Dev

列挙型のケースをパラメーターと比較する

分類Dev

Javaの汎用列挙型パラメーター。これは可能ですか?

分類Dev

ルートパラメータに独自の列挙型がありますか?

分類Dev

クラス内のいくつかの列挙型の1つであるパラメーターを持つ方法

分類Dev

列挙型クラスへの自動マッパー列挙型

分類Dev

Groovy:クラスの内部列挙型をクラス外のパラメーター型として使用する方法

分類Dev

Java8ストリームを使用して、リストから列挙型パラメータの項目でソート

分類Dev

複数の「パラメータ」を持つKotlin列挙型

分類Dev

パラメータ付きの列挙型

分類Dev

typescriptのパラメータとして列挙型を渡す

分類Dev

多くのパラメータを持つ列挙型

分類Dev

HQLクエリのパラメータとして列挙型リストを使用する

分類Dev

HQLクエリのパラメータとして列挙型リストを使用する

Related 関連記事

  1. 1

    テンプレートパラメータを指定せずに、クラステンプレートのスコープから列挙型を使用する

  2. 2

    コンストラクターのパラメーターとして列挙型クラスを渡す

  3. 3

    テンプレートパラメータとして列挙型を使用してc ++のテンプレートクラスから継承

  4. 4

    列挙型パラメーターからTypescript関数の戻り値の型を推測する

  5. 5

    列挙型コンストラクターからスーパーコンストラクターを呼び出せないのはなぜですか?

  6. 6

    ループから列挙型パラメーターを渡す方法は?

  7. 7

    Web APIで列挙型パラメーターを渡すためのベストプラクティス

  8. 8

    Web APIで列挙型パラメーターを渡すためのベストプラクティス

  9. 9

    Scala:コンストラクターに列挙型とその列挙型をパラメーターとして受け取る関数を与える

  10. 10

    任意の列挙型を取ることができるテンプレート(非型)パラメータークラスを作成できますか?C ++ 11

  11. 11

    列挙型の配列のパラメーター化?

  12. 12

    列挙型の共用体タイプのパラメーター?

  13. 13

    Java:メソッドパラメータのジェネリック列挙型

  14. 14

    クラスから列挙型メンバーにアクセスする

  15. 15

    コンストラクターを作成し、別のクラスから列挙型引数を取ります

  16. 16

    Swiftのパラメーターとして列挙型のクロージャを使用できますか?

  17. 17

    列挙型のケースをパラメーターと比較する

  18. 18

    Javaの汎用列挙型パラメーター。これは可能ですか?

  19. 19

    ルートパラメータに独自の列挙型がありますか?

  20. 20

    クラス内のいくつかの列挙型の1つであるパラメーターを持つ方法

  21. 21

    列挙型クラスへの自動マッパー列挙型

  22. 22

    Groovy:クラスの内部列挙型をクラス外のパラメーター型として使用する方法

  23. 23

    Java8ストリームを使用して、リストから列挙型パラメータの項目でソート

  24. 24

    複数の「パラメータ」を持つKotlin列挙型

  25. 25

    パラメータ付きの列挙型

  26. 26

    typescriptのパラメータとして列挙型を渡す

  27. 27

    多くのパラメータを持つ列挙型

  28. 28

    HQLクエリのパラメータとして列挙型リストを使用する

  29. 29

    HQLクエリのパラメータとして列挙型リストを使用する

ホットタグ

アーカイブ