objective-c - 使用 objective-c 将 id 转换为枚举

标签 objective-c enums

我正在尝试实现一个简单的方法,但我在 Objective-C 方面仍然是一个新手。

我有一个简单的方法,如果匹配,它会尝试从 id 转换为枚举中的特定值。

这是枚举

typedef enum {
   DXTypeUnknown = 0,
   DXDatasource = 1,
   DXGroup = 2
} DXPropertyType;

这是相关的方法:

-(DXPropertyType)typeFromObject:(id)_type {
    int _t = [_type intValue];

    switch (_t) {
        case DXDatasource:
            return [NSNumber numberWithInt:DXDatasource];
        case DXGroup:
            return [NSNumber numberWithInt:DXGroup];


        default:
            return [NSNumber numberWithInt:DXTypeUnknown];
    } 
}

我要实现的第一个检查是 id 是否可以转换为 int,然后查看它是否属于两个相关类别组或数据源,如果不属于则返回默认值。你能告诉我我实现的 switch/case 是否是一个合适的解决方案吗? 我也希望这种方法不会导致应用程序崩溃,因此建议检查什么,请记住在任何情况下都将返回默认值。

谢谢

[编辑] 我忘了说这个值将存储在 NSManagedObject 的一个字段中,根据 CoreData 的限制,它可以是一个 NSNumber,所以可能有更好的解决方案而不是枚举。

最佳答案

包含此代码以检查是否可以使用 id 可能是个好主意:

if (![_type respondsToSelector:@selector(intValue)])
    return nil;

但是,如果您总是传递 NSNumber,请继续并将方法声明为:

- (DXPropertyType)typeFromObject:(NSNumber)_type;

在您的代码中,您将返回一个 NSNumber。我不认为那是你真正的 想要,因为你对传递的 NSNumber 什么都不做。返回枚举 项目:

-(DXPropertyType)typeFromObject:(id)_type {

    if (![_type respondsToSelector:@selector(intValue)])
        return nil;

    int _t = [_type intValue];

    switch (_t) {
        case DXDatasource:
            return DXDatasource;
        case DXGroup:
            return DXGroup;


        default:
            return DXTypeUnknown;
    } 
}

然后这可以简化为:

- (DXPropertyType)typeFromObject:(id)_type {

    if ([_type respondsToSelector:@selector(intValue)]) {

        int t = [_type intValue];
        DXPropertyType property_t;

        if (t >= 1 && t <= 2)
            property_t = t;
        else
            property_t = DXTypeUnknown;

        return property_t;
    }
    return nil;
}

关于objective-c - 使用 objective-c 将 id 转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6624895/

相关文章:

ios - 如何在CollectionViewController中为gif设置动画。(Objective-C)

ios - 始终无法从 UIApplication 的 didRegisterForRemoteNotificationsWithDeviceToken 委托(delegate)获取设备 token

ios - NSMutableString的appendFormat不能追加多个项

java - 与标志中的逻辑运算符一起使用的两个枚举的平方

java - 使用 JDBI3 保留枚举字段的简洁方法?

ios - 使用自动调整大小时,UIView 不会在旋转时调整大小

iphone - Objective-C + RESTKit : Problems with getting Objects

可绑定(bind)到 DDL 的 C# 全局变量/常量,但名称为 "Nice"

ios - swift 2 : @objc protocol and enum array

c# - 增强 C# Enum 以使用按位运算?