我们知道有时候后抬给我们的类型,我们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]];