迭代器模式
1、什么是迭代器模式
提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
迭代器是 iOS 中运用的最多的模式之一,你用到的NSArray``NSDictionary``NSSet
等都是迭代器模式的实现,是 iOS 已经完整实现了的。如果你有详细的翻一下它们存在的属性的话,应该会注意到有一个属性叫objectEnumerator
和reverseObjectEnumerator
它们就是具体的迭代器,通过next
顺序访问。
2、迭代器模式用在什么地方
- 需要访问组合对象的内容又不暴露内部表示
- 通过多种方式遍历组合数组
- 通过一个统一接口,遍历各种类型的组合对象
说实话,需要用到迭代器的地方太多了,基本上有重复类型的对象都可以考虑使用迭代器模式,将所有对象封装到一起,方便读写与访问。
3、迭代器模式的使用
1、如果你会使用数组和字典,那么你就会使用迭代器
总结
属于系统就已经帮你实现好的模式,你只需要调用即可,想要更深入理解,建议去看看数据结构:队列、栈等容易加深理解
demo
/// 堆栈迭代器
class StackIterator: NSObject {
private lazy var stack = NSMutableArray()
func push(object :Any) {
stack.add(object)
}
func pop() -> Any {
let object = readStackRear
if empty() {
stack.remove(object)
}
return object
}
/// 读取栈尾
func readStackRear() -> Any {
if empty() {
return NSNull()
}
let object = stack.lastObject
return object!
}
func count() -> Int {
return stack.count
}
func empty() -> Bool {
return stack.count == 0
}
}
/// 队列迭代器
class QueueIterator: NSObject {
private lazy var quene = NSMutableArray()
func inQuene(object :Any) {
quene.add(object)
}
func outQuene() -> Any {
let object = readQueneHead()
if empty() == false {
quene.remove(object)
}
return object
}
/// 读取队首
func readQueneHead() -> Any {
if empty() {
return NSNull()
}
let object = quene.firstObject
return object!
}
func count() -> Int {
return quene.count
}
func empty() -> Bool {
return quene.count == 0
}
}
/// 迭代器
class EnumIterator: NSObject {
private(set) lazy var allObjects = NSArray()
private lazy var index = 0
init(allObjects : NSArray) {
super.init()
self.allObjects = allObjects
}
func nextObject() -> Any {
if index >= allObjects.count {
return NSNull()
}
let object = allObjects[index]
index += 1
return object
}
}
网友评论