ios自定義迭代器

協(xié)議 Iterator

//
//  Iterator.h
//  ios_迭代器
//
//  Created by 陶亞利 on 2016/12/22.
//  Copyright ? 2016年 陶亞利. All rights reserved.
//

#import <Foundation/Foundation.h>

@protocol Iterator <NSObject>

@required
/*
    判斷數(shù)組是否還有元素
 */
- (BOOL)hasNext;

/*
    返回數(shù)組中的元素(索引為0的元素)左冬, 必須先使用hasNext判斷冗锁,否則可能出現(xiàn)數(shù)組越界異常
 */
- (NSObject *)next;

/*
    刪除數(shù)組中的元素(索引為0的元素), 必須先使用hasNext判斷焕议,否則可能出現(xiàn)數(shù)組越界異常
 */
- (void)remove;

@end

分類 NSMutableArray+Helper.h

//
//  NSMutableArray+Helper.h
//  ios_迭代器
//
//  Created by 陶亞利 on 2016/12/22.
//  Copyright ? 2016年 陶亞利. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Iterator.h"

@interface NSMutableArray (Helper)

/*
    返回一個迭代器
 */
- (id<Iterator>)iterator;

@end
//
//  NSMutableArray+Helper.m
//  ios_迭代器
//
//  Created by 陶亞利 on 2016/12/22.
//  Copyright ? 2016年 陶亞利. All rights reserved.
//

#import "NSMutableArray+Helper.h"

/*
    實現(xiàn)私有類
 */
@interface NSMutableArrayIterator : NSObject<Iterator>

/**
 *   自定義初始化方法
 *     @param array 目標數(shù)組 NSMutableArray類型
 */
- (instancetype) initWithMutableArray:(NSMutableArray *) array;

/**
 *   持有的目標數(shù)組
 */
@property (nonatomic, strong) NSMutableArray *array;

@property (nonatomic, assign) int nextIndex;
@property (nonatomic, assign) int currentIndex;

@end

@implementation NSMutableArrayIterator

- (instancetype)initWithMutableArray:(NSMutableArray *)array{
    if (self = [super init]) {
        _array = array;
        _nextIndex = 0;
        _currentIndex = 0;
    }
    return self;
}

- (BOOL)hasNext{
    return _array != nil && _array.count > _currentIndex;
}

- (NSObject *)next{
    _nextIndex ++;
    _currentIndex = _nextIndex - 1;
    if (_currentIndex > (_array.count - 1)) {
        NSException *e = [NSException exceptionWithName:@"數(shù)組越界" reason:@"迭代索引錯誤诵棵,不能大于元素數(shù)量" userInfo:nil];
        @throw e;
    }
    
    return [_array objectAtIndex:_currentIndex];
}

- (void)remove{
    
    if (_currentIndex < 0) {
        
        NSException *e = [NSException exceptionWithName:@"狀態(tài)異常" reason:@"迭代索引錯誤舶胀,不能小于0" userInfo:nil];
        @throw e;
    }
    [_array removeObjectAtIndex:_currentIndex];
    if (_currentIndex < _nextIndex) {
        _nextIndex --;
        _nextIndex = _nextIndex > 0 ? _nextIndex : 0;
    }
}

@end



@implementation NSMutableArray (Helper)

- (id<Iterator,NSObject>)iterator{
    NSMutableArrayIterator *iteratorArray = [[NSMutableArrayIterator alloc] initWithMutableArray:self];
    return iteratorArray;
}

@end

使用

    NSArray *array = @[@1,@"A",@2.0f,@"B",@3,@"C",@4,@"D",@5,@"E",@6,@"F"];
    NSMutableArray *mutableItems = [NSMutableArray arrayWithArray:array];
    
    id<Iterator> iterator = [mutableItems iterator];
    while ([iterator hasNext]) {
        
        NSObject *object = [iterator next];
        if ([object isKindOfClass:[NSString class]]) {
            
            NSLog(@" objectValue = %@ ", object);
            [iterator remove];
        }
    }
    NSLog(@"選擇刪除 == %@",mutableItems);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末两蟀,一起剝皮案震驚了整個濱河市网梢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赂毯,老刑警劉巖浪讳,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件途凫,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機须尚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滨溉,“玉大人骨田,你說我怎么就攤上這事∑锼睿” “怎么了回懦?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長次企。 經(jīng)常有香客問我怯晕,道長,這世上最難降的妖魔是什么缸棵? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任舟茶,我火速辦了婚禮,結果婚禮上堵第,老公的妹妹穿的比我還像新娘吧凉。我一直安慰自己,他們只是感情好踏志,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布阀捅。 她就那樣靜靜地躺著,像睡著了一般针余。 火紅的嫁衣襯著肌膚如雪饲鄙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天圆雁,我揣著相機與錄音忍级,去河邊找鬼。 笑死伪朽,一個胖子當著我的面吹牛轴咱,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼嗦玖,長吁一口氣:“原來是場噩夢啊……” “哼患雇!你這毒婦竟也來了?” 一聲冷哼從身側響起宇挫,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤苛吱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后器瘪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翠储,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年橡疼,在試婚紗的時候發(fā)現(xiàn)自己被綠了援所。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡欣除,死狀恐怖住拭,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情历帚,我是刑警寧澤滔岳,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站挽牢,受9級特大地震影響谱煤,放射性物質發(fā)生泄漏。R本人自食惡果不足惜禽拔,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一刘离、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧睹栖,春花似錦硫惕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至梁只,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間埃脏,已是汗流浹背搪锣。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留彩掐,地道東北人构舟。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像堵幽,于是被迫代替她去往敵國和親狗超。 傳聞我的和親對象是個殘疾皇子弹澎,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內容