【问题标题】:Creating a constructor function with multiple enum states for a card game?为纸牌游戏创建具有多个枚举状态的构造函数?
【发布时间】:2023-03-21 21:10:01
【问题描述】:

我正在尝试编写一个自定义对象,我希望在该对象上关联或标记多个字母。

我正在尝试编写一个类似的设置,其中一个对象可以分配多个字母(或布尔标志)。

例如,Company 可能包含字母“A,B,C,F”(字母 A 到 F)。

我想创建一个Company 卡片并在构造方法中为其分配特定字母。

起初我以为我会使用一个数组——但我想保持字母分开,因为字母实际上只是一个“布尔”标志的大矩阵。

IE:
Letters          A    B   C   D   E   F
"Brand X"        Y    Y   N   N   Y   N

我的代码如下;

typedef enum _Letters {
    LetterA,
    LetterB,
    LetterC,
    LetterD,
    LetterE,
    LetterF,
} Letters;

@interface Corporation : NSObject
{
    NSString *_name; // Name of the card ie: "Automative"
    NSArray *_letters; // A->F
    int _value; // Value of the card in $
    VENCardState _state; // Current state of the card (is it in play or discard pile, etc)
}

我想要但确定的是如何让letters 在初始化构造函数中包含我想要的所有字母。

即;

initWithLetters:A,B,C....

但我不确定如何执行此操作。

基本上我想要一种简单的方法来创建一个具有多个枚举状态的构造函数,然后该方法会将这些枚举状态添加到letters的数组中

我应该能够记录该对象并发现它与哪些字母相关联。

【问题讨论】:

  • _letters 将持有一个完整的 VENLetters 或单个 A 的什么对象?
  • _letters 用于保存多个字母。它可以是“A”,但也可以是“A”、“B”、“C”、“D”。它可以是单个字母或多个字母。

标签: objective-c arrays constructor enums


【解决方案1】:

试试这个: - (id) initWithLetters:(VENLetters) 字母, ...; 或者: - (id) initWithLettersArray:(NSArray*)lettersArray;

【讨论】:

  • 有了第二个,initWithLettersArray 看起来很不错。我会试试这个。
  • 如果我尝试这样做,我会收到一个断言错误:Corporation *steel = [[Corporation alloc] initWithName:@"Steel" withValue:8 withLetters:steelLetters]; [steel log]; [steel release];
  • 我的构造函数看起来像:-(id) initWithName:(NSString *)name withValue:(int)value withLetters:(NSArray *)lettersArray { self = [super init]; if (self) { _name = name; _value = value; _letters = [lettersArray copy]; } return self; }
  • 关于什么的错误?你是在没有 ARC 的情况下写的吗?为什么[钢释放]?
  • 该错误与 steelLetters 有关,我目前正在尝试创建标准对象而不是构造函数,以查看是否可以识别问题。我之所以不写没有ARC,是因为“习惯”。稍后我将搬到 ARC,现在它只是一个 hacky 思想实验,我想我会试一试。
猜你喜欢
  • 2013-09-02
  • 2018-06-10
  • 2015-04-12
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
相关资源
最近更新 更多