我们知道有时候后抬给我们的类型,我们iOS语言可能很难识别所以导致崩溃或者说数组越界等等都会导致,我们一般在写项目的时候会自定义一些安全的接口。
1.数组取值的安全接口(使用扩展)
/** * 在数组中根据索引查找对象 * * @param index 索引 * * @return 查找的数据 */
- (id)objectAtIndex_zmm:(NSUInteger)index { if (self.count == 0) { return nil; } if (index >= self.count) { return nil; } return [self objectAtIndex:index]; }
使用 [array objectAtIndex_zmm:num]
2.字典自定义安全接口返回字符串
/** * 获取字符串,未找到则返回 @“” * * @param key NSString */
- (NSString *)stringForKey_zmm:(NSString *)key { NSString *value = [self objectForKey_zmm:key withValueClass:[NSString class]]; if ([NSString strNilOrEmpty_cmbc:value]) { value = @""; } return value; }
使用 NSMutableDictionary *newDict = [responseDic mutableCopy];
NSString *responseString = [newDict stringForKey_zmm:@"response"];
3.字典自定义安全接口返回字典或者数组
/** * 获取服务器返回数据,指定类型返回,如果不符合类型,那么返回nil * * @param key NSString * @param valueClass value类类型 * * @return value */
- (id)objectForKey_zmm:(NSString *)key withValueClass:(Class)valueClass { if (![key isKindOfClass:[NSString class]]) { return nil; } if (valueClass == NULL) { return nil; } id value = [self objectForKey:key]; if (!value) { return nil; } if (valueClass == [NSArray class] && ![value isKindOfClass:[NSArray class]]) { return [NSArray arrayWithObjects:value, nil]; } if (![value isKindOfClass:valueClass]) { return nil; } return value;
}
使用,例如返回数组
NSDictionary *dict = [NSDictionary dictionary];
NSArray *themeList = [dict objectForKey_zmm:@"ThemeList" withValueClass:[NSArray class]];
返回字典
NSDictionary *requestDict = [dict objectForKey_zmm:@"request" withValueClass:[NSDictionary class]];
|