让枚举值与字符串一一对应

让枚举值与字符串一一对应

 

说明

统一管理字符串,可以用数值来代表字符串,其目的就是为了增加代码的可读性.

 

源码

https://github.com/YouXianMing/StringAndValue

//
//  StringAndValue.h
//  StringAndValue
//
//  Created by YouXianMing on 15/6/9.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

#define E_STRING(value)   [StringAndValue stringValueWithEStringAndValue:(value)]
#define E_VALUE(value)    [StringAndValue numberValueWithEStringAndValue:(value)]

typedef enum : NSUInteger {

    EUserSucess,
    EUserError,

} EStringAndValue;

@interface StringAndValue : NSObject

/**
 *  获取数值
 *
 *  @param value 枚举值
 *
 *  @return 数值
 */
+ (EStringAndValue)numberValueWithEStringAndValue:(EStringAndValue)value;

/**
 *  获取数值对应的字符串
 *
 *  @param value 枚举值
 *
 *  @return 字符串
 */
+ (NSString *)stringValueWithEStringAndValue:(EStringAndValue)value;

@end
//
//  StringAndValue.m
//  StringAndValue
//
//  Created by YouXianMing on 15/6/9.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "StringAndValue.h"

static NSDictionary *_dataStringAndValue = nil;

@implementation StringAndValue

+ (void)initialize {

    if (self == [StringAndValue class]) {

        _dataStringAndValue = @{@(EUserSucess) : @"成功",
                                @(EUserError)  : @"失败",};
    }
}

+ (EStringAndValue)numberValueWithEStringAndValue:(EStringAndValue)value {

    return value;
}

+ (NSString *)stringValueWithEStringAndValue:(EStringAndValue)value {

    return _dataStringAndValue[@(value)];
}

@end
//
//  ViewController.m
//  StringAndValue
//
//  Created by YouXianMing on 15/6/9.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "ViewController.h"
#import "StringAndValue.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    NSLog(@"%@", E_STRING(EUserError));
    NSLog(@"%lu", (unsigned long)EUserError);
}

@end

重要的地方

时间: 2024-10-30 07:36:07

让枚举值与字符串一一对应的相关文章

获取Enum枚举值描述的几法方法

原文:获取Enum枚举值描述的几法方法 1.定义枚举时直接用中文 由于VS对中文支持的很不错,所以很多程序员都采用了此方案. 缺点:1.不适合多语言 2.感觉不太完美,毕竟大部分程序员大部分代码都使用英文 2.利用自定义属性定义枚举值的描述(博客园-大尾巴狼) 缺点:不适合多语言 原文:http://www.cnblogs.com/hilite/archive/2006/03/28/360793.html 枚举定义: [EnumDescription("订单.订单中的产品.产品项的状态.&quo

MVC3不能正确识别JSON中的Enum枚举值

原文:MVC3不能正确识别JSON中的Enum枚举值 一.背景 在MVC3项目里,如果Action的参数中有Enum枚举作为对象属性的话,使用POST方法提交过来的JSON数据中的枚举值却无法正确被识别对应的枚举值. 二.Demo演示 为了说明问题,我使用MVC3项目创建Controller,并且创建如下代码演示: //交通方式枚举 public enum TrafficEnum { Bus = 0, Boat = 1, Bike = 2, } public class Person { pub

java-SQlite 数据库不能存储double 值为字符串

问题描述 SQlite 数据库不能存储double 值为字符串 我使用下面的代码 public boolean addArea(AreaClass area , ArrayList<AreaMarkClass> areaArray) { area.id = getNextAreaId(); Log.d("longitude", area.longitude); Log.d("latitude", area.latitude); ContentValues

JavaScript中将一个值转换为字符串的方法分析[译]_javascript技巧

译者注:前两天在看ES5的时候顺便出了一道题,今天看到这篇文章,刚好解释的很清楚,就翻译了一下.在JavaScript中,主要有三种方法能让任意值转换为字符串.本文讲解了每种方法以及各自的优缺点. 1.转换字符串的三种方法 这三种将value转换为字符串的方法是: 1.value.toString() 2."" + value 3.String(value) 第一种方法存在的问题是,它不能把null和undefined转换为字符串.还有第二种和第三种方法,这两种方法的效果基本一样. •

swift语言的如何取多个枚举值

问题描述 swift语言的如何取多个枚举值 Objective-C语言的 self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight 用Swift语言如何编写 解决方案 这个是按位与,不可能不支持啊 解决方案二: swift不支持这种与操作,具体解决办法有两种,我的这边博文有具体说明http://blog.csdn.net/poppin_category/artic

浅谈char*类型返回值和字符串常量_C 语言

看这样一段简单的程序: #include <stdio.h> char* fun() { return "fun"; } int main() { printf("%s", fun()); return 0; } 这段程序可以正常run,但是最好不要这么做. 因为  直观上你返回了一个局部的东西出去.  你可以再外面定义这个常量,然后返回. 另外,字符串常量不可修改,而char*意味着要修改,故此最好加上const. 以上就是小编为大家带来的浅谈char

JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)_基础知识

JavaScript fromCharCode 方法 fromCharCode 方法用于把一个或多个 Unicode 值转换为(大写)字符串,并返回该字符串.其语法如下: 复制代码 代码如下: String.fromCharCode( num1, num2, ... ) 参数说明: 参数 说明 num1/num2 必需.Unicode 编码值 提示:该方法是 String 的静态方法,它的语法应该是 String.fromCharCode(),而不适用于您自己创建的 String 对象. fro

求大神帮助,我向用枚举,播放声音,可是不管怎么给RingMode这个属性赋枚举值都是播放 case (RingMode)0: 这段代码

问题描述 一直没有弄懂属性,用方法可以实现但是还得调用一次方法,有点麻烦,我看,Net框架的枚举属性用的那么顺手自己不会,还望高手给予指点 解决方案 解决方案二:我觉得你的本意应该写switch(value) 解决方案三:SET的时候值在value里面呀引用 switch(value){----} 解决方案四:你在set里用了自身的get,然后又没有初始化过程,所以理所当然的一直进默认值0了啊,不过你这写法好奇怪,为啥不直接xxx.yyyy,而是要强转呢解决方案五:switch(Ringmode

C#调用返回值为字符串的dll api,调试模式下崩溃

件的api返回值都是字符串类型,考虑vs2012中C#的托管指针调试可能有改动.所以将返回值类型修改为 IntPtr,在调用api后,将返回值用Marshal.PtrToStringAnsi转为字符串,解决方法繁琐了点,不知有无更 好的方案了. C#代码  代码如下 复制代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Ta