我正在使用Objective-C ++进行编码,并希望将ObjC结构转换为C ++。
ObjC侧变量位于const NSString*
,
C ++ - 侧变量在枚举中。
我的项目使用ARC。
我这样做:
NSDictionary* myDict = [NSDictionary dictionaryWithObjectsAndKeys: My::NameSpace::enumVar, MyObjCVar, nil]
这给了我一个编译器错误:
Implicit conversion of 'int' to 'id' is disallowed with ARC.
是否存在将任何C ++类型存储到NSDictionary中的通用方法?
答案 0 :(得分:2)
您无法在NSObject
内直接存储除id
指针(NSDictionary
类型)以外的任何内容,无论是键还是值。您需要将对象/指针/值包装在客观c对象(例如NSValue
或NSNumber
)中,或使用NSMapTable。
答案 1 :(得分:1)
由于字典的键必须是对象,并且您当前使用的值是int
,因此您应该能够将其转换为NSNumber
对象:
[NSNumber numberWithInt:enumVal];
答案 2 :(得分:1)
你可以这样做:
NSDictionary* myDict = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:My::NameSpace::enumVar], MyObjCVar, nil];
但为什么不使用更现代的语法?
NSDictionary* myDict = @{MyObjCVar : @(My::NameSpace::enumVar)};
我非常喜欢第二种选择。