iOS开发中的数组越界问题

我们在开发过程中可能会遇到一些数组越界的问题,当我们遇到这样的问题的时候我们可以为NSArrayNSMutableArray以及NSDictionary写一个分类,我们新建一个NSArray的分类,暂且叫做NSArray+Extend当然里面还包含了NSMutableArrayNSDictionary,这样我们在.h文件中写上一些方法,这里面包含了NSArrayNSMutableArray以及NSDictionary

@interface NSArray (Extend)
- (NSString *)stringForCheckedKey:(id)key;
- (id)objectAtCheckedIndex:(int)index;
- (NSString *)stringAtCheckedIndex:(int)index;
@end

@interface NSMutableArray (Extend)
- (void)addCheckedObject:(id)object;
@end
@interface NSDictionary (Extend)
- (id)objectForCheckedKey:(id)key;
- (NSString *)stringForCheckedKey:(id)key;
@end

接下来我们只要在.m文件中去实现以下就好了

#import "NSArray+Extend.h"
@implementation NSArray (Extend)
- (id)objectForCheckedKey:(id)key
{
    return nil;
}
- (NSString *)stringForCheckedKey:(id)key
{
    return @"";
}
//检查index是否超过总大小
- (id)objectAtCheckedIndex:(int)index
{
    if ([self count] <= index) {
//        DLog(@"NSArray数据超过容量");
        return nil;
    }
    else if (index <= -1) {
//        DLog(@"index 错误");
        return nil;
    }
    else
    {
        return [self objectAtIndex:index];
    }
}
- (NSString *)stringAtCheckedIndex:(int)index
{
    if ([self count] <= index) {
        //        DLog(@"NSArray数据超过容量");
        return @"";
    }
    else if (index <= -1) {
        //        DLog(@"index 错误");
        return @"";
    }
    else
    {
        return (NSString *)[self objectAtIndex:index];
    }
}
@end
@implementation NSMutableArray (Extend)
- (id)objectForCheckedKey:(id)key
{
    return nil;
}
- (void)addCheckedObject:(id)object
{
    if (object != nil) {
        [self addObject:object];
    }
    else
    {
        DLog(@"");
    }
}

@end

@implementation NSDictionary (Extend)
- (id)objectForCheckedKey:(id)key
{
    id object_ = [self objectForKey:key];
    
    if ([object_ isKindOfClass:[NSNull class] ]) {
        return nil;
    }
    
    return object_;
}
- (NSString *)stringForCheckedKey:(id)key
{    
    id object_ = [self objectForKey:key];
    
    if ([object_ isKindOfClass:[NSString class] ]) {
        
        return object_;
    }
    
    if([object_ isKindOfClass:[NSNumber class] ]) {
        
        return [object_ stringValue];
    }
    else if ([object_ isKindOfClass:[NSString class] ]) {
        
        return @"";
    }
    else
    {
        return @"";
    }
}


@end

做完这些我们就能使用了
具体使用方法如下:
1、从网络请求中取我们想要的值:

[[responseObject objectForCheckedKey:@"error"]stringForCheckedKey:@"message"];

使用方法大同小异,大家可以尝试使用一下!!!!

你可能感兴趣的:(iOS开发中的数组越界问题)