数组安全

99 阅读3分钟

@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