NSMutableDictionary 键没有指向任何内容
NSMutableDictionary keys pointing to nothing
我有一个 NSMutableDictionary
个 NSArray。我实际上想指向一些键。现在我正在使用 NSArray *someArray=[[NSArray alloc] init];
来代表什么,即一个空数组。有更好的方法吗?
您可以使用 NSNull
的单例实例,它是为这种情况设计的:
dict[@"key"] = [NSNull null];
(它只是框架提供的一个占位符对象,用于不接受 nil
值的集合。当然不要与实际的 nil
混淆)
您可以将 @[]
用于空数组,您还可以在集合 class 中使用 [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
}
您应该使用 NSNull 来表示 NSDictionary 中的任何内容。
话虽如此,在您拥有键的对象之前不分配键不是更容易吗?如果您分配 NSNull,您将需要测试与 NSNull 的相等性,因为测试 yourDictionary[@"nullKey"] 将始终 return YES,因为它确实有一个分配给它的对象。另一方面,如果你测试一个未分配的键,你会得到 nil,这可能就是你想要的。
我有一个 NSMutableDictionary
个 NSArray。我实际上想指向一些键。现在我正在使用 NSArray *someArray=[[NSArray alloc] init];
来代表什么,即一个空数组。有更好的方法吗?
您可以使用 NSNull
的单例实例,它是为这种情况设计的:
dict[@"key"] = [NSNull null];
(它只是框架提供的一个占位符对象,用于不接受 nil
值的集合。当然不要与实际的 nil
混淆)
您可以将 @[]
用于空数组,您还可以在集合 class 中使用 [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
}
您应该使用 NSNull 来表示 NSDictionary 中的任何内容。
话虽如此,在您拥有键的对象之前不分配键不是更容易吗?如果您分配 NSNull,您将需要测试与 NSNull 的相等性,因为测试 yourDictionary[@"nullKey"] 将始终 return YES,因为它确实有一个分配给它的对象。另一方面,如果你测试一个未分配的键,你会得到 nil,这可能就是你想要的。