【问题标题】:How to tell the difference between BOOL values in a dict: NO, nil, or doesn't exist如何区分 dict 中的 BOOL 值:NO、nil 或不存在
【发布时间】:2012-08-18 14:12:25
【问题描述】:

我正在使用条件语句,例如

// isComplete is a BOOL value
if (![videoDictionary valueForKey:@"isComplete"]) {

    // do important things here

}

问题是这个语句似乎无法区分 NO、nil 和 key 不存在。我如何确保仅当 isComplete 为 NO 时才满足此条件,而不是当 isComplete 为 nil 或 isComplete 不存在(无键)时才满足?如何阻止误报?

【问题讨论】:

    标签: objective-c boolean


    【解决方案1】:

    做类似的事情:

    NSNumber* IsComplete;
    IsComplete=[videoDictionary objectForKey:@"isComplete"];
    if (IsComplete!=nil && ![IsComplete boolValue])
    {
       ...
    }
    

    【讨论】:

    • 强制转换为 NSNumber 重要吗?如果没有这一步,它会工作吗?
    【解决方案2】:

    这实际上不是问题。字典不能直接包含 BOOLs,也不能将nil 作为键的值。 @"isComplete" 键的值必须是一个有效的对象,如果它存在的话。如果它代表一个布尔值,它很可能是一个NSNumber,你应该检查对象的boolValue

    如果表达式 [someDictionary objectForKey:@"aKey"] 的计算结果为 false,那只是因为该键没有值。

    【讨论】:

    • 这很有趣,我不知道字典不能包含非对象。我的问题是我不希望一个无价值的键评估为假......我希望它评估为 nil,否则当我只想接受假而不是空值时它会抛出误报。
    • nil 在布尔上下文中始终为假(如if 语句的条件)。要在对象存在时获得“真”,请使用obj != nil 或简单地使用!obj
    猜你喜欢
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2012-01-02
    • 2014-11-15
    • 2019-07-07
    相关资源
    最近更新 更多