场景:项目中总会有需要判断字符串是否合法的需求
1、常规情况下一大部分公司都是这么写的。【假设这是分类】
- (BOOL)isString {
return [self isKindOfClass:[NSString class]];
}
- (BOOL)isValidString {
return [self isString] && ((NSString *)self).length > 0;
}
2、看起来人畜无害,其实暗藏着不合理的地方?
3、如果调用方,明知道方法参数应该传递NSString类型而给了另外一个类型。则可能造成下边所说的情况。
解决方案:判断是不是有效的字符串【排除空字符串】《如果已经是字符串了,则没必要在次强转类型,因为&&是短路元算符号,前边条件为NO则直接返回结果》
之所以还需要判断length,是因为服务器返回的有可能是一个空字符串,我们在这里的需求时判断一个合法有效的字符串类型
+ (BOOL)p_isValidString:(NSString *)vaildStr {
return [vaildStr isKindOfClass:[NSString class]] && ((NSString *)self).length > 0;
}
调用:类方法的内部使用self为本身类类型,不能一会写类名一会写self,这个要看每个公司具体的规范而定
+ (BOOL)fileExistsAtAbsolutePath:(NSString *):path {
NSParameterAssert([self p_isVaildString:path]);
return [[NSFileManager defaultManager] fileExistAtPath:path];
}