@interface NSObject (Safe)
/**
* 字符串/number 转 int
*/
// 7.6.5未使用方法修改
//- (int)yx_safeIntValue;
/**
字符串/number转integer
*/
- (NSInteger)safeIntegerValue;
/**
字符串/number转float
*/
- (CGFloat)safeFloatValue;
/**
字符串/number转 long long
*/
- (long long)yx_safeLonglongValue;
/**
字符串/number转 long
*/
- (long)yx_safelongValue;
/**
字符串/number转bool
*/
- (BOOL)safeBoolValue;
/**
字符串转字典
*/
- (NSDictionary *)yx_jsonStrToDict;
/**
字典转字符串
*/
- (NSString *)yx_dictToJsonStr;
/**
比较两个返回值 是否一样
安全的比较 NSString 和 NSNumber
*/
- (BOOL)safeIsEqualToString:(NSString *)aString;
/**
字典安全取值
*/
- (id)safeObjForKey:(NSString *)aKey;
/**
字典安全设置值
*/
- (void)setObjectNotNull:(id)anObject forKey:(id)aKey;
/**
数组安全加值
*/
- (void)yx_safeAddObject:(id)anObject;
/**
数组安全删除
*/
- (void)safeRemoveObject:(id)anObject;
/**
数组指定位置安全添加
*/
// 7.6.5未使用方法修改
//- (void)safeInsertObject:(id)anObject index:(NSInteger)index;
/**
数组安全获取对象
*/
- (id)yx_safeObjectAtIndex:(NSUInteger)index;
/**
KVC
*/
- (void)safeSetValue:(id)value forKey:(NSString *)key;
- (void)safeSetValue:(id)value forKeyPath:(NSString *)keyPath;
// 7.6.5未使用方法修改
//- (void)safeSetValuesForKeysWithDictionary:(NSDictionary<NSString *,id> *)keyedValues;
/**
替换字符串
*/
- (NSString *)safeStringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;
@end
@implementation NSObject (Safe)
#pragma mark 类型转换
// 7.6.5未使用方法修改
//- (int)yx_safeIntValue
//{
// int value = 0;
// if (NotNilAndNull(self) && [self isKindOfClass:[NSString class]]) {
// value = [(NSString *)self intValue];
// }
// else if (NotNilAndNull(self) && [self isKindOfClass:[NSNumber class]]) {
// value = [(NSNumber *)self intValue];
// }
// return value;
//}
- (NSInteger)safeIntegerValue
{
NSInteger value = 0;
if (NotNilAndNull(self) && [self isKindOfClass:[NSString class]]) {
value = [(NSString *)self integerValue];
}
else if (NotNilAndNull(self) && [self isKindOfClass:[NSNumber class]]) {
value = [(NSNumber *)self integerValue];
}
return value;
}
- (CGFloat)safeFloatValue
{
CGFloat value = 0;
if (NotNilAndNull(self) && [self isKindOfClass:[NSString class]]) {
value = [(NSString *)self floatValue];
}
else if (NotNilAndNull(self) && [self isKindOfClass:[NSNumber class]]) {
value = [(NSNumber *)self floatValue];
}
return value;
}
- (long long)yx_safeLonglongValue {
long long value = 0;
if (NotNilAndNull(self) && [self isKindOfClass:[NSString class]]) {
value = [(NSString *)self longLongValue];
}
else if (NotNilAndNull(self) && [self isKindOfClass:[NSNumber class]]) {
value = [(NSNumber *)self longLongValue];
}
return value;
}
- (long )yx_safelongValue {
long value = 0;
if (NotNilAndNull(self) && [self isKindOfClass:[NSString class]]) {
value = [(NSString *)self longValue];
}
else if (NotNilAndNull(self) && [self isKindOfClass:[NSNumber class]]) {
value = [(NSNumber *)self longValue];
}
return value;
}
- (BOOL)safeBoolValue
{
BOOL value = NO;
if (NotNilAndNull(self) && [self isKindOfClass:[NSString class]]) {
value = [(NSString *)self boolValue];
}
else if (NotNilAndNull(self) && [self isKindOfClass:[NSNumber class]]) {
value = [(NSNumber *)self boolValue];
}
return value;
}
- (NSDictionary *)yx_jsonStrToDict{
if (NotNilAndNull(self) && [self isKindOfClass:[NSString class]]) {
NSData *data = [(NSString *)self dataUsingEncoding:NSUTF8StringEncoding];
if (NotNilAndNull(data)) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
if (NotNilAndNull(dict) && [dict isKindOfClass:[NSDictionary class]]) {
return dict;
}
}
}
return nil;
}
- (NSString *)yx_dictToJsonStr{
if (NotNilAndNull(self) && [self isKindOfClass:[NSDictionary class]] && [NSJSONSerialization isValidJSONObject:self]) {
NSData *data = [NSJSONSerialization dataWithJSONObject:(NSDictionary *)self options:NSJSONWritingPrettyPrinted error:nil];
if (NotNilAndNull(data)) {
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
if (NotNilAndNullAndEmpty(str)) {
return str;
}
}
}
return nil;
}
#pragma mark 判断 取值 赋值
- (BOOL)safeIsEqualToString:(NSString *)aString
{
if (NotNilAndNull(self) && [self isKindOfClass:[NSString class]]) {
NSString *obj = (NSString *)self;
return [obj isEqualToString:aString];
}else if (NotNilAndNull(self) && [self isKindOfClass:[NSNumber class]])
{
NSNumber *obj = (NSNumber *)self;
return [[obj stringValue] isEqualToString:aString];
}else{
// //NSAssert(NO, @"类型不合法");
return NO;
}
}
- (id)safeObjForKey:(NSString *)aKey
{
if (self && [self isKindOfClass:[NSDictionary class]] && NotNilAndNull(aKey)) {
NSDictionary *dictObj = (NSDictionary *)self;
id value = [dictObj objectForKey:aKey];
if (NotNilAndNull(value)) {
return value;
}
return nil;
}else {
// //NSAssert(NO, @"类型不合法");
return nil;
}
}
- (void)setObjectNotNull:(id)anObject forKey:(id)aKey;
{
if ([self isKindOfClass:[NSMutableDictionary class]])
{
if (anObject != nil && ![anObject isEqual:[NSNull null]] && aKey != nil)
{
NSMutableDictionary *dictObj = (NSMutableDictionary *)self;
[dictObj setObject:anObject forKey:aKey];
}
}
}
- (void)yx_safeAddObject:(id)anObject
{
if (![self isKindOfClass:[NSMutableArray class]]) {
//NSAssert(NO, @"类型不合法");
}
else if (NotNilAndNull(anObject)) {
NSMutableArray *obj = (NSMutableArray *)self;
[obj addObject:anObject];
}
}
- (void)safeRemoveObject:(id)anObject
{
if (![self isKindOfClass:[NSMutableArray class]]) {
//NSAssert(NO, @"类型不合法");
}
else if (NotNilAndNull(anObject)) {
NSMutableArray *obj = (NSMutableArray *)self;
if ([obj containsObject:anObject]) {
[obj removeObject:anObject];
}
}
}
// 7.6.5未使用方法修改
//- (void)safeInsertObject:(id)anObject index:(NSInteger)index
//{
// if (![self isKindOfClass:[NSMutableArray class]]) {
// //NSAssert(NO, @"类型不合法");
// }else if (NotNilAndNull(anObject)){
// NSMutableArray *obj = (NSMutableArray *)self;
// if (![obj containsObject:anObject] && index <= obj.count) {
// [obj insertObject:anObject atIndex:index];
// }
// }
//
//}
- (id)yx_safeObjectAtIndex:(NSUInteger)index {
if (NotNilAndNull(self) && [self isKindOfClass:[NSArray class]]) {
NSArray *obj = (NSArray *)self;
if (index < obj.count) {
id value = obj[index];
if (NotNilAndNull(value)) {
return value;
}
}
}else{
//NSAssert(NO, @"类型不合法");
}
return nil;
}
/**
KVC
*/
- (void)safeSetValue:(id)value forKey:(NSString *)key {
if (NotNilAndNull(value) && NotNilAndNullAndEmpty(key)) {
[self setValue:value forKey:key];
}
}
- (void)safeSetValue:(id)value forKeyPath:(NSString *)keyPath {
if (NotNilAndNull(value) && NotNilAndNullAndEmpty(keyPath)) {
[self setValue:value forKeyPath:keyPath];
}
}
// 7.6.5未使用方法修改
//- (void)safeSetValuesForKeysWithDictionary:(NSDictionary<NSString *,id> *)keyedValues {
// if (NotNilAndNull(keyedValues) && [keyedValues isKindOfClass:[NSDictionary class]]) {
// [self setValuesForKeysWithDictionary:keyedValues];
// }
//}
- (NSString *)safeStringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement{
if (NotNilAndNull(self) && [self isKindOfClass:[NSString class]]) {
if (NotNilAndNullAndEmpty(target) && NotNilAndNullAndEmpty(replacement)) {
return [(NSString *)self stringByReplacingOccurrencesOfString:target withString:replacement];
}
return (NSString *)self;
}
return nil;
}
@end