预期的标识符或'('使用typedef枚举Objective-C

时间:2014-03-20 18:08:17

标签: ios objective-c xcode enums typedef

请帮忙!我正在制作iPhone应用程序,而且我正在尝试使用' typedef enum'特征。我听说这让我可以轻松制作出自己类型的'所以说。我尝试使用它,但我得到错误,但代码看起来正确。我使用这个错了吗?

.h

中的代码
typedef enum CoinTypes
{
  Bitcoin,
  Litecoin,
  Dogecoin
} CoinType;
<。> .m中的代码,错误来自的行有一个&#39;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&#右边的符号

- (void)checkCoin
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    if ([[defaults objectForKey:@"AboutCoin"] isEqualToString:@"Bitcoins"])
    {
        // Bitcoins was selected
        CoinType = Bitcoin; <<
    }
    else if ([[defaults objectForKey:@"AboutCoin"] isEqualToString:@"Litecoins"])
    {
        // Litecoins was selected
        CoinType = Litecoin; <<
    }
    else
    {
        // Dogecoins was selected
        CoinType = Dogecoin; <<
    }

    NSLog(@"%@", [defaults objectForKey:@"AboutCoin"]);
}

我得到的错误是:&#39; 预期的标识符或&#39;(&#39; &#39;

4 个答案:

答案 0 :(得分:2)

CoinType = Litecoin;

您错过了变量名称。 CoinType是类型。尝试:

CoinType coinType = LiteCoin;

答案 1 :(得分:1)

您需要创建CoinType类型的变量:

- (void)checkCoin
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    CoinType type;

    if ([[defaults objectForKey:@"AboutCoin"] isEqualToString:@"Bitcoins"])
    {
        // Bitcoins was selected
        type = Bitcoin;
    }

    //etc.
}

答案 2 :(得分:1)

如接受的答案中所述,需要声明变量名称。

另外考虑使用Apples NS_ENUM宏:

typedef NS_ENUM(NSInteger, CoinType) {
    Bitcoin,
    Litecoin,
    Dogecoin
}; 

这个宏有助于定义名称(此处为CoinType)和类型(此处和通常为NSInteger)。它提示编译器进行类型检查。

进一步阅读:

答案 3 :(得分:0)

typedef主要用于创建现有数据类型的同义词。

typedef的基本语法是:

typedef existing_type new_type ;

所以当你写得像:

typedef enum CoinTypes {..} CoinType;

CoinType代表enum CoinTypes

要解决此问题,请通过以下任一方式声明enum

解决方案1:

// Create a global variable
typedef enum CoinTypes
{
  Bitcoin,
  Litecoin,
  Dogecoin
} CoinTypes;

CoinTypes CoinType;

解决方案2:

// Remove typedef
enum CoinTypes
{
  Bitcoin,
  Litecoin,
  Dogecoin
} CoinType;