gpt4 book ai didi

ios - Objective-C : How to check object type without a lot of if statements

转载 作者:行者123 更新时间:2023-11-28 19:27:41 25 4
gpt4 key购买 nike

我正在尝试将我的 text 字符串设置为 URL。以下代码有效,但我觉得我可以重构它以使其看起来更整洁。

NSString *text = @“”;

id json = [NSJSONSerialization JSONObjectWithData:[data dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];

if ([json isKindOfClass:[NSDictionary class]]) {

id data = json[@“data”];

if ([data isKindOfClass:[NSDictionary class]]) {
id value = data[@"value"];

if ([value isKindOfClass:[NSArray class]]) {
id url = [value valueForKey:@"url"];

if ([url isKindOfClass:[NSString class]]) {
text = url;
}
}
}
}

到目前为止,整个“厄运之山”都在继续,我想知道如何在不使用这么多 if 语句的情况下检查对象类型是否正确。任何提示或建议表示赞赏。

编辑:这是我的代码的精简版,但概念是一样的。

最佳答案

在我看来,有两种方法可以让它看起来更整洁并忽略 if-else-nesting-hell。

  • 使用返回

    NSString *text = @“”;

    id json = [NSJSONSerialization JSONObjectWithData:[data dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];

    if (![json isKindOfClass:[NSDictionary class]]) {
    return;
    }
    id data = json[@“data”];

    if (![data isKindOfClass:[NSDictionary class]]) {
    return;
    }
    id value = data[@"value"];

    if (![value isKindOfClass:[NSArray class]]) {
    return;
    }
    id url = [value valueForKey:@"url"];

    if (![url isKindOfClass:[NSString class]]) {
    return;
    }
    text = url;
  • 创建一个通用方法来检查类的种类并返回一个安全值

    - (id)safeValueFromObject:(id)object forKey:(NSString *)key class:(Class)valueClass {
    if (![object respondsToSelector:@selector(valueForKey:)]) {
    return [[valueClass alloc] init];
    }

    id result = [object valueForKey:key];
    return [result isKindOfClass:valueClass] ? result : [[valueClass alloc] init];
    }

    使用

    NSString *text = @"";

    id json = [NSJSONSerialization JSONObjectWithData:[data dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];
    id data = [self safeValueFromObject:json forKey:@"data" class:NSDictionary.class];
    id value = [self safeValueFromObject:data forKey:@"value" class:NSArray.class];
    id url = [self safeValueFromObject:value forKey:@"url" class:NSString.class];
    text = url;

关于ios - Objective-C : How to check object type without a lot of if statements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50458392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com