2011-04-29 48 views
0

我該怎麼做?基本上我想存儲RGB顏色值,這些顏色值可以通過顏色名稱進行檢索。我的C++代碼使用boost unordered_map來執行此操作:NSDictionary:爲每個鍵存儲3個浮點值

("SlateBlue1", Color(0.5137f, 0.4353f,1.0f)) 
("tan3", Color(0.8039f, 0.5216f, 0.2471f)) 
("grey32", Color(0.3216f, 0.3216f, 0.3216f)) 

顏色是存儲3個值的類。 試圖在Objective-C中做到這一點是綁在我的結和怪異的錯誤!我發現的大多數字典示例都只是匹配2個字符串。當然,我可以在.mm文件中使用C++代碼,但如果任何人有任何想法如何實現這種Obj-C方式,我很樂意學習,謝謝。

回答

0

它在Cocoa中完全一樣 - 使用NSDictionary而不是unordered_map,而不是使用const char *替代unordered_map,而使用UIColor替代對象的Color並完成。

例如,[NSDictionary dictionaryWithObject: [UIColor redColor] forKey: @"Red"]]來創建單入口地圖。調整爲多種顏色,你就全部設置好了。如果您不在iOS上,請使用NSColor。

您可能會錯過字典是一個(幾乎)無類型集合的關鍵點,因此它可以使用異組鍵類型來存儲一組異構對象類型。

0

如果您是顏色對象擴展NSObject,您應該能夠將這些顏色作爲值存儲在您的NSDictionary中。

NSDictionary *colors = [[NSDictionary alloc] initWithObjectsAndKeys:Color1, @"SlateBlue1", Color2, @"tan3", Color3, @"grey32", nil ]; 

這應該工作,然後你會使用

Color *mycolor = [colors objectForKey:@"SlateBlue1"]; 

,然後從對象訪問你的顏色。

此外,不確定您的顏色對象的目的,但您可以使用可可觸摸的NSColor或可可觸摸的UIColor來存儲這些對象。

+0

布賴恩您好,感謝,我如何避免泄漏的所有爲字典創建的Color對象是否被複制到那裏?當字典出現時它們會被破壞,還是應該單獨釋放? – 2011-04-29 12:50:24

+0

如果您使用UIColor類方法之一,如'[UIColor redColor]'或[UIColor colorWithRed:.5 green:.2 blue:.7 alpha:1]',則不必擔心泄漏它們。您不會得到「擁有」引用,因此您不必釋放它,並且NSDictionary將在適當時保留並釋放它。 – 2011-11-24 02:21:46

0

(我沒有測試此代碼,只需從內存中寫道)如果你想使用一個UIColor對象或類似的,其他的答案覆蓋。如果你真的想存儲三個浮動,你有幾個選項。您可以存儲一個NSArray三個NSNumbers每個三重花車:

NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSArray arrayWithObjects:[NSNumber numberWithFloat:.5], [NSNumber numberWithFloat:.7], [NSNumber numberWithFloat:.2], nil], @"bleem", 
    ... // more array/string pairs 
    nil]; 

或者你可以使用一個NSData每個三重花車:

NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSData dataWithBytes:&(float[]){ .5, .7, .2} length:3*sizeof(float)], @"bleem", 
    ... // more data/string pairs 
    nil]; 
相關問題