日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

iOS设计模式 - 迭代器

發(fā)布時(shí)間:2023/12/10 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS设计模式 - 迭代器 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

iOS設(shè)計(jì)模式 - 迭代器

?

原理圖?

?

說(shuō)明

提供一種方法順序訪問(wèn)一個(gè)聚合對(duì)象中的各種元素,而又不暴露該對(duì)象的內(nèi)部表示。?

?

源碼

https://github.com/YouXianMing/iOS-Design-Patterns

// // Node.h // IteratorPattern // // Created by YouXianMing on 15/10/26. // Copyright ? 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h>@interface Node : NSObject/*** 下一個(gè)節(jié)點(diǎn)*/ @property (nonatomic, strong) Node *nextNode;/*** 節(jié)點(diǎn)里面的內(nèi)容*/ @property (nonatomic, strong) id item;/*** 初始化節(jié)點(diǎn)** @param item 節(jié)點(diǎn)攜帶的內(nèi)容** @return 節(jié)點(diǎn)*/ - (instancetype)initWithItem:(id)item;@end // // Node.m // IteratorPattern // // Created by YouXianMing on 15/10/26. // Copyright ? 2015年 YouXianMing. All rights reserved. // #import "Node.h"@implementation Node- (instancetype)initWithItem:(id)item {self = [super init];if (self) {self.item = item;}return self; }@end // // LinkedList.h // IteratorPattern // // Created by YouXianMing on 15/10/26. // Copyright ? 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h> #import "Node.h"#import "IteratorProtocol.h" #import "LinkedListIterator.h"@interface LinkedList : NSObject/*** 頭結(jié)點(diǎn)*/ @property (nonatomic, strong, readonly) Node *headNode;/*** 節(jié)點(diǎn)的數(shù)目*/ @property (nonatomic, assign, readonly) NSInteger numberOfNodes;/*** 添加數(shù)據(jù)** @param item 數(shù)據(jù)*/ - (void)addItem:(id)item;/*** 創(chuàng)建迭代器對(duì)象** @return 迭代器對(duì)象*/ - (id <IteratorProtocol>)createIterator;@end // // LinkedList.m // IteratorPattern // // Created by YouXianMing on 15/10/26. // Copyright ? 2015年 YouXianMing. All rights reserved. // #import "LinkedList.h"@interface LinkedList ()/*** 頭結(jié)點(diǎn)*/ @property (nonatomic, strong, readwrite) Node *headNode;/*** 節(jié)點(diǎn)的數(shù)量*/ @property (nonatomic, assign, readwrite) NSInteger numberOfNodes;@end@implementation LinkedList- (void)addItem:(id)item {if (self.headNode == nil) {self.headNode = [[Node alloc] initWithItem:item];} else {[self addItem:item node:self.headNode];}self.numberOfNodes++; }- (id <IteratorProtocol>)createIterator {return [[LinkedListIterator alloc] initWithLinkedList:self]; }#pragma mark - Private Methods - (void)addItem:(id)item node:(Node *)node {if (node.nextNode == nil) {node.nextNode = [[Node alloc] initWithItem:item];} else {[self addItem:item node:node.nextNode];} }@end // // LinkedListIterator.h // IteratorPattern // // Created by YouXianMing on 15/10/26. // Copyright ? 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h> #import "IteratorProtocol.h" @class LinkedList;@interface LinkedListIterator : NSObject <IteratorProtocol>/*** 由鏈表進(jìn)行初始化** @param linkedList 鏈表對(duì)象** @return 迭代器工具*/ - (id)initWithLinkedList:(LinkedList *)linkedList;@end // // LinkedListIterator.m // IteratorPattern // // Created by YouXianMing on 15/10/26. // Copyright ? 2015年 YouXianMing. All rights reserved. // #import "LinkedListIterator.h" #import "LinkedList.h"@interface LinkedListIterator ()@property (nonatomic, weak) LinkedList *linkedList; @property (nonatomic, weak) Node *currentNode;@end@implementation LinkedListIterator- (id)initWithLinkedList:(LinkedList *)linkedList {if (self = [super init]) {self.linkedList = linkedList;self.currentNode = linkedList.headNode;}return self; }- (id)next {id item = self.currentNode.item;self.currentNode = self.currentNode.nextNode;return item; }- (BOOL)hasNext {if (self.currentNode == nil) {return NO;} else {return YES;} }- (id)item {return self.currentNode.item; }@end // // IteratorProtocol.h // IteratorPattern // // Created by YouXianMing on 15/10/26. // Copyright ? 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h>@protocol IteratorProtocol <NSObject>/*** 下一個(gè)對(duì)象** @return 對(duì)象*/ - (id)next;/*** 是否存在下一個(gè)對(duì)象** @return 對(duì)象*/ - (BOOL)hasNext;/*** 內(nèi)容** @return 返回內(nèi)容*/ - (id)item;@end // // ViewController.m // IteratorPattern // // Created by YouXianMing on 15/10/26. // Copyright ? 2015年 YouXianMing. All rights reserved. // #import "ViewController.h"#import "LinkedList.h" #import "LinkedListIterator.h"@interface ViewController ()@property (nonatomic, strong) LinkedList *linkedList;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// 創(chuàng)建鏈表結(jié)構(gòu)self.linkedList = [[LinkedList alloc] init];// 添加鏈表元素[self.linkedList addItem:@"1"];[self.linkedList addItem:@"2"];[self.linkedList addItem:@"3"];[self.linkedList addItem:@"4"];[self.linkedList addItem:@"5"];// 創(chuàng)建迭代器id <IteratorProtocol> iterator = [self.linkedList createIterator];// 進(jìn)行元素迭代while ([iterator hasNext]) {NSLog(@"%@", iterator.item);[iterator next];} }@end

?

細(xì)節(jié)

轉(zhuǎn)載于:https://www.cnblogs.com/YouXianMing/p/4911148.html

總結(jié)

以上是生活随笔為你收集整理的iOS设计模式 - 迭代器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。