2014-10-06 30 views
1

我在Objective-C++中编写代码并希望将ObjC结构转换为C++。 ObjC端变量在const NSString*, C++端变量在枚举中。如何将C++变量作为值存储在NSDictionary中?

我的项目使用ARC。

我做这样说:

NSDictionary* myDict = [NSDictionary dictionaryWithObjectsAndKeys: My::NameSpace::enumVar, MyObjCVar, nil] 

这给了我一个编译器错误:

Implicit conversion of 'int' to 'id' is disallowed with ARC. 

有没有存储任何C++类型为NSDictionary的一个通用的方法是什么?

回答

1

你可以这样做:

NSDictionary* myDict = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:My::NameSpace::enumVar], MyObjCVar, nil]; 

但为什么不使用更现代的语法?

NSDictionary* myDict = @{MyObjCVar : @(My::NameSpace::enumVar)}; 

我非常喜欢第二个选项。

+0

你的孩子们喜欢你现代的语法......脱下我的草坪! – picciano 2014-10-06 21:54:31

+0

@兰斯不知道这种现代语法。谢谢你的提示!简洁得多。 – kakyo 2014-10-07 18:27:30

2

对于密钥或值,您不能直接存储除NSObject指针(id类型)之外的任何内容,而是在NSDictionary之内。您可能需要将对象/指针/值装入目标c对象中,例如NSValueNSNumber或使用NSMapTable

1

由于字典的密钥必须的对象,目前正在使用的值是一个int,你应该能够将其转换为一个NSNumber对象:

[NSNumber numberWithInt:enumVal];

相关问题