请帮忙!我在做一个iPhone应用,我在尝试使用typedef enum功能。我听说这让我可以很容易地创造自己的"类型"。我尝试使用它,但我得到错误,但代码看起来是正确的。我用错了吗?
.h 中的代码typedef enum CoinTypes
{
Bitcoin,
Litecoin,
Dogecoin
} CoinType;
代码在。m中,错误来自的行在
右边有一个'<<'符号。- (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"]);
}
我得到的错误是:'期望的标识符或'(''
CoinType = Litecoin;
你缺少一个变量名。类型为CoinType
。试一试:
CoinType coinType = LiteCoin;
您需要创建一个类型为CoinType的变量:
- (void)checkCoin
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
CoinType type;
if ([[defaults objectForKey:@"AboutCoin"] isEqualToString:@"Bitcoins"])
{
// Bitcoins was selected
type = Bitcoin;
}
//etc.
}
正如在接受的答案中提到的,需要声明一个变量名。
另外考虑使用apple的NS_ENUM
宏:
typedef NS_ENUM(NSInteger, CoinType) {
Bitcoin,
Litecoin,
Dogecoin
};
这个宏帮助定义名称(这里是CoinType)和类型(这里通常是NSInteger)。它提示编译器进行类型检查。
- https://developer.apple.com/library/ios/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html
- http://nshipster.com/ns_enum-ns_options/
typepedef主要用于创建现有数据类型的同义词。
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;