我见过许多代码,其中一个突出的问题是检查传递的参数的有效性。对于例如
1)如果传入的string
参数实际上是有效的string
+ (BOOL)isEmptyString:(NSString *) string {
if (!string || ![string isKindOfClass:[NSString class]]) return YES;
NSString *_string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
return (!_string.length || [_string isEqualToString:@"null"]);
}
2)或参数确实是dictionary
等。
这导致在代码中的许多地方检查有效性。什么是预防它的最佳方法?并确保string
和dictionary
通过实际上是正确的?
答案 0 :(得分:0)
我不确定只有一种正确的方法可以做到这一点。
在我的项目中,我将威胁警告设为错误'在目标设置中并设置-Wall -Weverything -Wno-objc-missing-property-synthesis -Wno-gnu -Wno-c++98-compat -Wno-assign-enum
警告标志。
这个偏执狂'模式不允许开发人员将错误类型的数据传递给方法。
第二件事是断言。 所以在你的情况下,我会做这样的事情:
+ (BOOL)isEmptyString:(NSString *) string {
NSParameterAssert([string isKindOfClass:[NSString class]];
...
}
因此,在开发过程中,我会看到出现问题。
最后一个。如果您认为在Release构建方法中可能得到错误的数据类型,那么您仍然需要进行检查:
if (![string isKindOfClass:[NSString class]]) {
//Log an error
//Decide what do in this case. (Send log, Show error message to user, throw exception ...
}