当前位置:  开发笔记 > Android > 正文

Objective-C中的Java-enum样式类?

如何解决《Objective-C中的Java-enum样式类?》经验,为你挑选了1个好方法。

我是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
}

你会如何在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 的方法是预先填充的.但这感觉完全笨拙而且根本不优雅......

有更令人满意的方法吗?



1> Peter N Lewi..:

"更令人满意的方法"并没有太多的方法.

正常的Cocoa模式是创建如下方法:

+ (MessageTypes*) sharedDefaultMessageType;
+ (MessageTypes*) sharedExpressMessageType;
+ (MessageTypes*) sharedBroadcastMessageType;
etc

然后实现它们:

+ (MessageTypes*) sharedDefaultMessageType
{
   static MessageTypes* thisMessageType = nil;
   if ( !thisMessageType ) {
      thisMessageType = [[MessageTypes alloc] initWithColor:@"white" tagName:@"standard" dbId:1];
   }
   return thisMessageType;
}

或者,将共享的MessageType*存储在NSMutableArray或NSMutableDictionary中,或者按照您的方式预先计算它们,这些都是同等有效的批准.

请注意,上面的"模板"方法可以通过宏生成,以便您可以在.m文件中写入:

CREATEMESSAGETYPE( Default, @"white", @"standard", 1 )
CREATEMESSAGETYPE( Express, @"red", @"expressMessage", 2 )
CREATEMESSAGETYPE( Broadcast, @"green", @"broadcast", 3 )

根据你的观点,这可能是"更令人满意"或更丑陋.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有