【问题标题】:Check if NSString have a negative bool value检查 NSString 是否具有负布尔值
【发布时间】:2014-11-06 16:35:42
【问题描述】:

在我最近的应用程序中,我收到一个 JSON,需要验证对象字符串实际上是布尔值还是普通字符串。

我知道 NSString 类 有一个方法boolValue。然而,如果建立一个负布尔值或不是一个有效的布尔值,这个方法返回 NO

但是,如果字符串确实是布尔值或普通字符串,我需要在我的应用程序中具有不同的行为,因为 JSON 可以同时具有这两种情况。

知道如何实现吗?

【问题讨论】:

  • 所以基本上你想知道字符串是1还是0true还是false,还是yes还是no
  • 是的,基本上。但我想检查是否可以避免“检查周期”来验证内容而不是对象类型。

标签: ios ios7 nsstring


【解决方案1】:

您可以简单地创建一个 NSString 类别并添加一个方法isJSONBoolean

@implementation NSString (JSONBoolean)

-(BOOL) isJSONBoolean
{
    return [self isEqualToString:@"false"] || [self isEqualToString:@"true"]
    || [self isEqualToString:@"NO"] || [self isEqualToString:@"YES"]
    || [self isEqualToString:@"0"] || [self isEqualToString:@"1"];
}

@end

根据您需要测试的值随意更改它。

【讨论】:

  • 您的解决方案会起作用,但我更喜欢检查对象而不是内容。我瘦shier的解决方案更清楚。谢谢
  • 这个解决方案更适用于后端实际上并没有在响应中提供布尔值而是对某种布尔表示形式进行字符串编码的场景,不幸的是太常见了。
  • 通过阅读您的问题,我虽然在反序列化 JSON 后有一个 NSString 对象。
【解决方案2】:

来自 JSON 的 BOOL 实际上会被包装在 NSNumber 中,因此就像检查对象的类一样简单。

if ([object isKindOfClass:[NSNumber class]]) {
    BOOL value = [object boolValue];
}

【讨论】:

  • 当然,假设您已经通过NSJSONSerialization 传递了这个。
猜你喜欢
  • 2012-07-01
  • 1970-01-01
  • 2016-08-22
  • 2013-04-02
  • 2014-12-13
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 2012-12-15
相关资源
最近更新 更多