我是Obj-C的新手,请原谅我,如果这是一个愚蠢的问题:
我如何以Javas枚举的方式实现一些?或者更确切地说:
我想要一个具有一些已知属性的类,这些属性在编译时修复并且每个实例都是唯一的.另外我只想要一种实例类型.
让我举一个Java的例子:
public enum MessageTypes {
DEFAULT("white", "standard", 1),
EXPRESS("red", "expressMessage", 2),
BORADCAST("green", "broadcast", 3);
String color; String tagName; int dbId;
MessageTypes(String color, String tagName, int dbId) {
// you get the idea
}
//some methonds like getEnumByTagName
}
Run Code Online (Sandbox Code Playgroud)
你会如何在Objective-C中做这样的事情?我错过了什么吗?这是一个糟糕的模式吗?
提前致谢!
编辑:对不起,如果我没有说清楚.我知道,obj-c枚举不是我想要的(因为它们只比int的typedef略多).
我想创建一组(特定的单例,不可变)特定类的实例.Apples Dev-Docs中的单例模式没有用,因为我想要一个类的多个不同实例,每个实例在其属性中都有单独的值.
这样做的目的是拥有多个可以作为属性分配给Message的消息类型(大约20个).我的每种消息类型都有(修复和预定义)颜色,属性值(以XML表示)和数字ID.
在Java中,我会在代码示例中使用枚举.但是如何创建不同的MessageType并将它们与Obj-C中的属性相关联?
创建20个MessageType的Sublcasses(每个都有一个包含属性的单例实例)对于这样一个简单的任务和完全的过度杀戮似乎很多工作.
我目前的方法是使用NSArray创建一个包含不同实例的类.首次访问类似+(id)messageTypeForId:NSInteger id_NSArray 的方法是预先填充的.但这感觉完全笨拙而且根本不优雅......
有更令人满意的方法吗?
"更令人满意的方法"并没有太多的方法.
正常的Cocoa模式是创建如下方法:
+ (MessageTypes*) sharedDefaultMessageType;
+ (MessageTypes*) sharedExpressMessageType;
+ (MessageTypes*) sharedBroadcastMessageType;
etc
Run Code Online (Sandbox Code Playgroud)
然后实现它们:
+ (MessageTypes*) sharedDefaultMessageType
{
static MessageTypes* thisMessageType = nil;
if ( !thisMessageType ) {
thisMessageType = [[MessageTypes alloc] initWithColor:@"white" tagName:@"standard" dbId:1];
}
return thisMessageType;
}
Run Code Online (Sandbox Code Playgroud)
或者,将共享的MessageType*存储在NSMutableArray或NSMutableDictionary中,或者按照您的方式预先计算它们,这些都是同等有效的批准.
请注意,上面的"模板"方法可以通过宏生成,以便您可以在.m文件中写入:
CREATEMESSAGETYPE( Default, @"white", @"standard", 1 )
CREATEMESSAGETYPE( Express, @"red", @"expressMessage", 2 )
CREATEMESSAGETYPE( Broadcast, @"green", @"broadcast", 3 )
Run Code Online (Sandbox Code Playgroud)
根据你的观点,这可能是"更令人满意"或更丑陋.
| 归档时间: |
|
| 查看次数: |
3508 次 |
| 最近记录: |