我有一个NSMutableDictionary
的NSArrays。我实际上想要指出的一些关键点。现在我使用NSArray *someArray=[[NSArray alloc] init];
代表什么,即一个空数组。有更好的方法吗?
答案 0 :(得分:1)
您可以使用专为此类情况设计的NSNull
单例实例:
dict[@"key"] = [NSNull null];
(它只是一个占位符对象,框架提供用于不接受nil
值的集合。不要与实际的nil
混淆当然)
答案 1 :(得分:1)
您应该使用NSNull来表示NSDictionary中的任何内容。
有人说,在你拥有对象之前,不更容易分配密钥吗?如果你指定NSNull,你需要测试与NSNull的相等性,因为测试你的字典[@" nullKey"]将总是返回YES,因为它确实有一个分配给它的对象。另一方面,如果你测试一个未分配的密钥,你将得到零,这可能是你想要的。
答案 2 :(得分:0)
您可以将@[]
用于空数组,也可以使用[NSNull null]
在集合类中表示空值,这完全取决于您要查找的语义。
我倾向于认为@[]
更容易预测,因为你可以使用你期望的所有东西,迭代,-(NSUInteger)count
等。
要检查空值,你必须明确检查... dict["key"] == [NSNull null]
,因为即使[NSNull null]
是布尔值true,因为它是一个对象......
例如,这不起作用:
for (NSString *s in [NSNull null])
{
printf("you will never get here!");
}
也不会:
id obj = [NSNull null];
[obj length];
printf("you wont get here");
所以它实际上取决于你想要如何构建你的流控制,因为如果你关心的是否存在键和值,那么你处于3状态逻辑......
使用NSNULL
if(!dict[somekey])
{
//key not set
}else if (dict[somekey] == [NSNull null])
{
//key set, but null
}else
{
// should expect a real value
}
使用空白阵列
if(!dict[somekey])
{
//key not set
}else if (![dict[somekey] count])
{
//key set, but empty array
}else
{
// should expect a real value
}