2014-10-06 32 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];

相關問題