这个巨大的if语句感觉很难......你会如何在Objective C中做到这一点

And*_*son 4 iphone cocoa-touch objective-c

for (NSString *metarComponent in self.readingComponents) {
    if ( [metarComponent hasPrefix:@"+"]
         || [metarComponent hasPrefix:@"-"]
         || [metarComponent hasPrefix:@"VC"]
         || [metarComponent hasPrefix:@"MI"]
         || [metarComponent hasPrefix:@"PR"])
         || [metarComponent hasPrefix:@"BC"])
         || [metarComponent hasPrefix:@"DR"])
         || [metarComponent hasPrefix:@"BL"])
         || [metarComponent hasPrefix:@"SH"])
         || [metarComponent hasPrefix:@"TS"])
         || [metarComponent hasPrefix:@"PZ"])
         || [metarComponent hasSuffix:@"DZ"])
         || [metarComponent hasSuffix:@"RA"])
         || [metarComponent hasSuffix:@"SN"])
         || [metarComponent hasSuffix:@"SG"])
         || [metarComponent hasSuffix:@"IC"])
         || [metarComponent hasSuffix:@"PL"])
         || [metarComponent hasSuffix:@"GR"])
         || [metarComponent hasSuffix:@"GS"])
         || [metarComponent hasSuffix:@"UP"])
         || [metarComponent hasSuffix:@"BR"])
         || [metarComponent hasSuffix:@"FG"])
         || [metarComponent hasSuffix:@"FU"])
         || [metarComponent hasSuffix:@"VA"])
         || [metarComponent hasSuffix:@"DU"])
         || [metarComponent hasSuffix:@"SA"])
         || [metarComponent hasSuffix:@"HZ"])
         || [metarComponent hasSuffix:@"PY"])
         || [metarComponent hasSuffix:@"PO"])
         || [metarComponent hasSuffix:@"SQ"])
         || [metarComponent hasSuffix:@"FC"])
         || [metarComponent hasSuffix:@"SS"])
         || [metarComponent hasSuffix:@"DS"]) {     
            [rawWeatherStrings addObject:metarComponent];
        }
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*ner 5

我将创建一个前缀的NSSet和一个后缀的NSSet,然后在这些集合上使用containsObject与第一个字符(在查看前缀集后也是前两个字符)和最后两个字符从相关字符串中拉出来检查集.查找将非常快.

  • 您实际上需要检查第一个字符和前两个字符,因为前缀可以是原始if语句中的一个或两个字符. (2认同)