我该怎么做?基本上我想存储可以响应颜色名称检索的RGB颜色值。我的C ++代码使用boost unordered_map来执行此操作:
("SlateBlue1", Color(0.5137f, 0.4353f,1.0f))
("tan3", Color(0.8039f, 0.5216f, 0.2471f))
("grey32", Color(0.3216f, 0.3216f, 0.3216f))
Color是一个存储3个值的类。 在Objective-C中尝试这样做会让我陷入困境和奇怪的错误!我发现的大多数字典示例都只是匹配2个字符串。当然我可以在.mm文件中使用C ++代码,但如果有人有任何想法如何实现这个Obj-C方式,我很高兴学习,谢谢。
答案 0 :(得分:0)
在Cocoa中完全相同 - 使用NSDictionary而不是unordered_map,NSString而不是const char *用于键和UIColor而不是Color用于对象,你就完成了。
例如,[NSDictionary dictionaryWithObject: [UIColor redColor] forKey: @"Red"]]
创建单一条目地图。调整多种颜色,你就完全了。如果你不在iOS上,请使用NSColor。
您可能错过了字典是(几乎)无类型集合的关键点,因此它可以使用异类密钥类型集存储异构的对象类型集。
答案 1 :(得分:0)
如果你的颜色对象扩展了NSObject,你应该能够将这些颜色存储为NSDictionary
中的值。
NSDictionary *colors = [[NSDictionary alloc] initWithObjectsAndKeys:Color1, @"SlateBlue1", Color2, @"tan3", Color3, @"grey32", nil ];
这应该有效,然后你会使用
Color *mycolor = [colors objectForKey:@"SlateBlue1"];
然后从您的对象访问您的颜色。
此外,不确定您的颜色对象的用途,但您可以使用NSColor
用于Cocoa,或UIColor
用于Cocoa-touch来存储它们。
(我没有测试过这段代码,只是从内存中写的)
答案 2 :(得分:0)
如果您想使用UIColor
对象或类似对象,其他答案将涵盖它。如果你真的想存储三个花车,你有几个选择。您可以为每个浮点数存储三个NSNumber的NSArray:
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];