我有一个电影租赁系统的现有数据库。 每部电影都有一个评级属性。 在SQL中,他们使用一个约束来限制这个属性的允许值。 CONSTRAINT film_rating_check CHECK ((((((((rating)::text = ''::text) OR ((rating)::text = 'G'::text)) OR ((rating)::text = 'PG'::text)) OR ((rating)::text = 'PG-13'::text)) OR ((rating)::text = 'R'::text)) OR ((rating)::text = 'NC-17'::text))) 我认为使用Java枚举将约束映射到对象世界将会很好。 但是由于“PG-13”和“NC-17”中的特殊字符,不可能简单地取得所允许的值。 所以我实现了以下枚举: public enum Rating { UNRATED ( "" ), G ( "G" ), PG ( "PG" ), PG13 ( "PG-13" ), R ( "R" […]
我使用cppreference阅读了C ++中的枚举声明。 然后我做了Enum类,并检查它是否是类types或不使用std::is_class 。 #include <iostream> enum class Enum { red = 1, blue, green }; int main() { std::cout << std::boolalpha; std::cout << std::is_class<Enum>::value << '\n'; } 然后我编译并运行在Linux平台上的G ++编译器,它打印出false值。 那么是不是类的types? 如果枚举是一个类的types,那么为什么我得到错误的价值?
tl; dr版本 当枚举常量的数据types如此声明一个枚举时,如何保证是NSUInteger而不是unsigned int: enum { NSNullCellType = 0, NSTextCellType = 1, NSImageCellType = 2 }; typedef NSUInteger NSCellType; NSUInteger的typedef似乎没有以任何方式绑定到枚举声明。 完整版 我正在通过苹果的64位cocoa过渡指南阅读一些枚举值的指导,我拿出一个问题。 下面是枚举常量部分(冗长)的引用,重点是我的: 枚举(enum)常量的一个问题是它们的数据types经常是不确定的。 换句话说,枚举常量不是可预测的unsigned int。 使用传统构造的枚举,编译器实际上根据它find的内容设置基础types。 基础types可以是(signed)int或甚至long。 以下面的例子: type enum { MyFlagError = -1, MyFlagLow = 0, MyFlagMiddle = 1, MyFlagHigh = 2 } MyFlagType; 编译器查看这个声明,并find一个赋值给一个成员常量的负值,声明枚举int的基本types。 如果成员的值的范围不适合int或unsigned int,那么基types默默地变成64位(长)。 定义为枚举的数量的基types因此可以静默地改变大小以符合枚举中的值。 无论您是在编译32位还是64位,都可能发生这种情况。 不用说,这种情况给二进制兼容性带来了障碍。 为了解决这个问题,苹果决定在Cocoa API中更加明确枚举types。 现在头文件不是按照枚举来声明参数,而是单独声明枚举的types,这个枚举的大小可以被指定。 […]
在Objective-C程序中遇到枚举可见性问题。 我有两个头文件,一个定义了一个typedef enum 。 另一个文件需要使用typedeftypes。 在直接的C中,我只是简单地包含另一个头文件,但是在Objective-C中,build议不要在头文件之间使用#import ,而@class根据需要使用forward @class声明。 但是,我无法弄清楚如何转发 – 声明一个枚举types。 我不需要实际的枚举值,除了在相应的.m实现文件中,我可以安全地#import了。 那么我怎样才能得到在头文件中识别typedef enum ?
我有一个asp.net-mvc网页,我想显示一个基于枚举的下拉列表。 我想显示每个枚举项的文本,并将该枚举值与该枚举相关联的int值。 有没有任何优雅的方式来做这个转换?
鉴于以下枚举: enum Audience { case Public case Friends case Private } 如何从audience常量下面得到string"Public" ? let audience = Audience.Public
我试图将我的一些Obj-C类转换成Swift。 还有一些其他的Obj-C类仍然在那个转换的类中使用枚举。 我在预发布文档中search,无法find它,或者我错过了它。 有没有办法在Obj-C类中使用Swift枚举? 或者链接到这个问题的文档? 这就是我如何在旧的Obj-C代码和新的Swift代码中声明我的枚举。 我的老对象C代码: typedef NS_ENUM(NSInteger, SomeEnum) { SomeEnumA, SomeEnumB, SomeEnumC }; @interface SomeClass : NSObject … @end 我新的斯威夫特代码: enum SomeEnum: NSInteger { case A case B case C }; class SomeClass: NSObject { … } 更新:从答案。 它不能在Swift早于1.2的版本中完成。 但根据这个官方Swift博客 。 在与XCode 6.3一起发布的Swift 1.2中,您可以在Objective-C中使用Swift Enum, @objc在enum前面添加@objc
假设我在.h文件中声明了typedef,如下所示: typedef enum { JSON, XML, Atom, RSS } FormatType; 我想build立一个函数,将typedef的数值转换为一个string。 例如,如果发送了消息[self toString:JSON] 它会返回“JSON”。 该函数看起来像这样: -(NSString *) toString:(FormatType)formatType { //need help here return []; } 顺便说一句,如果我尝试这个语法 [self toString:FormatType.JSON]; 将typedef值传递给方法,我得到一个错误。 我错过了什么?
我不认为我从根本上理解enum是什么,什么时候使用它。 例如: typedef enum { kCircle, kRectangle, kOblateSpheroid } ShapeType; 这里真的宣布什么了?