如何将C++变量作为值存储在NSDictionary中

How to store a C++ variable as a value in NSDictionary?

本文关键字:存储 NSDictionary C++ 变量      更新时间:2023-10-16

我正在Objective-C++中进行编码,希望将ObjC结构转换为C++。ObjC侧变量在CCD_ 1中,C++端的变量在enum中。

我的项目使用ARC.

我是这样做的:

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

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

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

有没有一种通用的方法可以将任何C++类型存储到NSDictionary中?

除了键或值的NSDictionary中的NSObject指针(id类型)之外,您不能直接存储任何内容。您需要在目标c对象(如NSValueNSNumber)中框入对象/指针/值,或者使用NSMapTable。

你可以做:

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

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

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

我非常喜欢第二种选择。

由于字典的键必须是对象,并且您当前使用的值是int,因此您应该能够将其转换为NSNumber对象:

[NSNumber numberWithInt:enumVal];