iOS,程序,设计,产品相关iOS开发

iOS设计模式之迭代器模式

2017-05-16  本文已影响35人  3697d6c42285

迭代器模式

1、什么是迭代器模式

提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。

迭代器是 iOS 中运用的最多的模式之一,你用到的NSArray``NSDictionary``NSSet等都是迭代器模式的实现,是 iOS 已经完整实现了的。如果你有详细的翻一下它们存在的属性的话,应该会注意到有一个属性叫objectEnumeratorreverseObjectEnumerator它们就是具体的迭代器,通过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
    }
    
}
上一篇 下一篇

猜你喜欢

热点阅读