指定 NSDictionary 条目的值类型

Posted

技术标签:

【中文标题】指定 NSDictionary 条目的值类型【英文标题】:Specify value type of NSDictionary entries 【发布时间】:2016-07-12 15:22:27 【问题描述】:

对于NSArray,Objective-C 允许我们指定要存储在数组中的值的类型。例如,我可以声明一个NSString 的数组,如下所示:

NSArray<NSString*> *arrayOfStrings;

虽然它不一定由编译器和运行时环境强制执行,但这样的指示对于可读性和稍微简单的代码语法都很方便。

我想知道NSDictionary 是否存在这样的语法。例如,要指定字典中的值类型,是否存在类似以下内容:

NSDictionary<UIImage*> *imageMappings;

字典的值被指定为UIImage 类型。

其他问题:

可以为NSDictionary指定密钥类型吗?

如果可能,如何指定没有键类型的值类型?

Foundation 中是否还有其他具有此通用参数化的常见数据结构?

【问题讨论】:

【参考方案1】:

对于NSDictionary,您指定键和值的类型:

NSDictionary<NSString*, UIImage*> *imageMappings

如果您不想要特定类型的密钥,请使用id&lt;NSCopying&gt; 甚至NSObject *

只有 NSArrayNSDictionary 支持这种表示法。

【讨论】:

idid&lt;NSCopying&gt; 会比 NSObject * 更好 我不知道这些是否是有效的类型说明符。 我不明白答案 - 它缺乏“如何”语义。您能否提供一个简单的语法示例?我已经尝试了 10 种不同的方法,但无济于事。 NSDictionary&lt;KeyType*, ValueType*&gt; *myTypedDictionary.

以上是关于指定 NSDictionary 条目的值类型的主要内容,如果未能解决你的问题,请参考以下文章

无法分配“NSDictionary”类型的值?键入“字符串?”

无法将“__NSArrayM”类型的值转换为“NSDictionary”

不能用字符串类型的索引下标 NSDictionary 类型的值

无法将“__NSSingleObjectArrayI”类型的值转换为“NSDictionary”

Swift - 无法将“__NSCFString”类型的值转换为“NSDictionary”

无法在 Swift 中将“__NSSingleObjectArrayI”类型的值转换为“NSDictionary”