Objective-C HashMap等价物

Bla*_*k20 23 cocoa-touch objective-c hashmap

我试图转换一段使用HashMap的Java代码,该HashMap包含一个对象作为键,一个值作为对象.

private static HashMap<Class<? extends Component>, ComponentType> componentTypes = new HashMap<Class<? extends Component>, ComponentType>();
Run Code Online (Sandbox Code Playgroud)

我一直在阅读如何使用Obj-C做到这一点,但我没有成功,大多数人建议使用NSDictionary,问题是他们的键需​​要是字符串,我需要它们作为对象.另一个选项是NSMapTable,但它在iOS上不可用.有人能够协助我如何将其转换为obj-c等价物吗?

谢谢,

Jas*_*oco 23

一键的键NSDictionary不需要是字符串.它们可以是任何实现的对象NSCopying.但是,如果对象是自定义对象,则需要对-hash-isEqual:消息生成合理的响应,但这与在Java集合中使用对象相同,因此它不应该是一个很大的挑战.


Mon*_*olo 17

NSMutableDictionary(假设你还需要在其初始化后的字典中设置值)的作品在两个方面:

  1. 作为传统的字典/ hashmap,您可以在其中设置如下值:

    [myDictionary setObject: theValue forKey: anyObject];

  2. 作为具有KVC兼容属性的对象,恰好是动态定义的:

    [myDictionary setValue: theValue forKey: aString];

如果键是a NSString,则两者是可互换的,除了您不能将对象设置为nilwith setObject:forKey:,但您可以传递nilsetValue:forKey:.


mip*_*adi 8

你想用一个NSDictionary.你这么说

他们的键需​​要是字符串,我需要它们作为对象

一键NSDictionary不需要是字符串 - 它们可以是符合NSCopying协议的任何对象.

  • 这是对的.请注意,有一种常见的情况,`NSDictionary`**需要字符串键:如果希望`NSDictionary`在属性列表中使用. (2认同)