建筑公司企业网站,WordPress mx 主题,网站打印模板制作,网页制作价格iOS设计模式 - 迭代器 原理图 说明 提供一种方法顺序访问一个聚合对象中的各种元素#xff0c;而又不暴露该对象的内部表示。 源码 https://github.com/YouXianMing/iOS-Design-Patterns //
// Node.h
// IteratorPattern
//
// Created by YouXianMing on 15/10/26.
// … iOS设计模式 - 迭代器 原理图 说明 提供一种方法顺序访问一个聚合对象中的各种元素而又不暴露该对象的内部表示。 源码 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.hinterface Node : NSObject/*** 下一个节点*/
property (nonatomic, strong) Node *nextNode;/*** 节点里面的内容*/
property (nonatomic, strong) id item;/*** 初始化节点** param item 节点携带的内容** return 节点*/
- (instancetype)initWithItem:(id)item;end //
// Node.m
// IteratorPattern
//
// Created by YouXianMing on 15/10/26.
// Copyright © 2015年 YouXianMing. All rights reserved.
//#import Node.himplementation 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.hinterface LinkedList : NSObject/*** 头结点*/
property (nonatomic, strong, readonly) Node *headNode;/*** 节点的数目*/
property (nonatomic, assign, readonly) NSInteger numberOfNodes;/*** 添加数据** param item 数据*/
- (void)addItem:(id)item;/*** 创建迭代器对象** return 迭代器对象*/
- (id IteratorProtocol)createIterator;end //
// LinkedList.m
// IteratorPattern
//
// Created by YouXianMing on 15/10/26.
// Copyright © 2015年 YouXianMing. All rights reserved.
//#import LinkedList.hinterface LinkedList ()/*** 头结点*/
property (nonatomic, strong, readwrite) Node *headNode;/*** 节点的数量*/
property (nonatomic, assign, readwrite) NSInteger numberOfNodes;endimplementation 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/*** 由链表进行初始化** param linkedList 链表对象** 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.hinterface LinkedListIterator ()property (nonatomic, weak) LinkedList *linkedList;
property (nonatomic, weak) Node *currentNode;endimplementation 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.hprotocol IteratorProtocol NSObject/*** 下一个对象** return 对象*/
- (id)next;/*** 是否存在下一个对象** return 对象*/
- (BOOL)hasNext;/*** 内容** return 返回内容*/
- (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.hinterface ViewController ()property (nonatomic, strong) LinkedList *linkedList;endimplementation ViewController- (void)viewDidLoad {[super viewDidLoad];// 创建链表结构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];// 创建迭代器id IteratorProtocol iterator [self.linkedList createIterator];// 进行元素迭代while ([iterator hasNext]) {NSLog(%, iterator.item);[iterator next];}
}end 细节 转载于:https://www.cnblogs.com/YouXianMing/p/4911148.html