我在我的代码中这样做,它给了我这个错误:表达式不是一个整数常量表达式
码:
//Tag for Database #define kInsertIntoDatabase @"Insert" #define kDeleteFromDatabase @"Delete" #define kUpdateIntoDatabase @"Update" #define kQueryDatabase @"Query" -(void)documentIsReady:(NSString *)sqlmethod{ if(document.documentState == UIDocumentStateNormal) { context = document.managedObjectContext; } switch (sqlmethod) { case kInsertIntoDatabase: [self insertCoreDataModel]; break; case kDeleteFromDatabase: [self deleteCoreDataModel]; break; case kUpdateIntoDatabase: [self updateCoreDataModel]; break; case kDeleteFromDatabase: [self deleteCoreDataModel]; break; default: break; } }
怎么了?不确定有什么问题.需要一些指导……
解决方法
如果你想使用这个开关,你应该选择一个enum,它可以让你在切换整数的同时保持可读性.
试试这个:
typedef enum { DatabaseMainFunctions_InsertIntoDatabase,DatabaseMainFunctions_DeleteFromDatabase,DatabaseMainFunctions_UpdateInto,DatabaseMainFunctions_Query }DatabaseMainFunctions;
然后像
switch (sqlmethod) { case DatabaseMainFunctions_InsertIntoDatabase: [self insertCoreDataModel]; break; case DatabaseMainFunctions_DeleteFromDatabase: [self deleteCoreDataModel]; break; case DatabaseMainFunctions_UpdateInto: [self updateCoreDataModel]; break; case DatabaseMainFunctions_Query: [self deleteCoreDataModel]; break; default: break; }
注意,您的案例删除在您的示例中写了两次,可能是一些复制粘贴错误.
在Nicolas Bouilleaud的github上有一个目标c开关,用于字符串(实际上是对象):objcswitch