我试图实现一个简单的方法,但我仍然是objective-c的新手.
我有这个简单的方法,如果匹配,它试图从枚举转换为枚举中的特定值.
这是枚举
typedef enum {
DXTypeUnknown = 0,
DXDatasource = 1,
DXGroup = 2
} DXPropertyType;
Run Code Online (Sandbox Code Playgroud)
这是相关的方法:
-(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];
}
}
Run Code Online (Sandbox Code Playgroud)
我要实现的第一个检查是如果id可以转换为int,然后查看它是否属于两个相关的类别组或数据源,或者如果没有则返回默认值.你能告诉我我实施的开关/箱子是否是一个合适的解决方案?我也希望这种方法不会导致应用程序崩溃,所以最好检查一下,记住在任何情况下都要返回默认值.
谢谢
[编辑] 我忘了说这个值将存储在NSManagedObject的一个字段中,由CoreData限制可以是一个NSNumber,所以可能有一个更好的解决方案而不是枚举.
包含此代码来检查是否id可以使用可能是个好主意:
if (![_type respondsToSelector:@selector(intValue)])
return nil;
Run Code Online (Sandbox Code Playgroud)
但是,如果您始终传递 NSNumber,请继续将该方法声明为:
- (DXPropertyType)typeFromObject:(NSNumber)_type;
Run Code Online (Sandbox Code Playgroud)
在您的代码中,您将返回一个 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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后这可以简化为:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9664 次 |
| 最近记录: |