Swift的生成器和序列(1)

作者: 铁围山 | 来源:发表于2016-10-19 14:04 被阅读612次

Array是我们最常用的集合类了,Array的遍历也是很常用的操作。有没有想过语言底层是怎样实现遍历这个操作的呢。在OC中我们可以使用for循环直接用数组下标来访问,但是在swift中已经废弃了这种方式,而是用for in 来实现这个操作。for in这种方式的遍历是针对SequenceType这个protocol的,Array之所以支持for in就是因为它实现了SequenceType这个protocol。要说SequenceType就离不开GeneratorType这个protocol,它是SequenceType的基础。
先看GeneratorType的定义:(swift 3.0已经更名为IteratorProtocol)

public protocol IteratorProtocol {
    associatedtype Element
    public mutating func next() -> Self.Element?
}

这个协议由一个关联类型Element和一个next方法组成。Element表明这个协议会生成一个什么类型的值,next方法则是生成这个值的过程。下面我们通过一段代码说明这个protocol怎么工作。

class ReverseIterator:IteratorProtocol{
    var element:Int
    init<T>(array:[T]) {
        self.element = array.count-1
    }
    func next() ->Int?{
        let result:Int? = self.element < 0 ? nil : element
        element -= 1
        return result
    }
}

let arr = ["A","B","C","D","E"]

let itertator = ReverseIterator(array:arr)
while let i = itertator.next(){
    print("element \(i) of the array is \(arr[i])")
}

我们定义了一个ReverseIterator类实现IteratorProtocol协议。通过next方法,我们实现了一个倒序遍历一个数组。创建ReverseIterator对象的时候,需要一个Array做参数,然后我们通过while循环遍历数组,遍历的时候循环获取ReverseIterator对象的next方法直到返回nil结束。注意:我们这个例子是通过获取数组的下标来实现获取数组元素的,也可以直接获取数组元素。

相关文章

  • Swift的生成器和序列(1)

    Array是我们最常用的集合类了,Array的遍历也是很常用的操作。有没有想过语言底层是怎样实现遍历这个操作的呢。...

  • [python]练习笔记2

    filter和列表生成器的区别1.列表生成器接受的是序列,string、tuple、range、set、list、...

  • 函数(四)生成器和promise

    1 生成器函数 定义和使用生成器 生成器函数能生成一组值的序列。显式地向生成器请求一个新的值,随后生成器响应一个新...

  • Swift Sequence(序列) & Collection(

    Swift Sequence(序列) & Collection(集合) & 高阶函数 [TOC] 前言 序列和集合...

  • Flutter JSON序列化(FromJson和ToJson)

    序列化方式 手动序列化和反序列化 通过代码生成自动序列化和反序列化 对于较小项目,使用代码生成器可能会过度。对于具...

  • Swift_集合 arr.shuffle(),使用给定生成器将序

    使用给定生成器将序列打乱。

  • 19-01-08生成式

    1.什么是生成式 生成式就是生成器的一种特殊写法 2.写法 a.生成器 = (表达式 for 变量 in 序列) ...

  • Day12笔记

    1.什么是生成式生成式就是生成器的一种特殊写法 2.写法a.生成器 = (表达式 for 变量 in 序列) -...

  • 01.08 笔记 - 生成式

    1.什么是生成式 生成式就是生成器的一种特殊写法 2.写法 a.生成器 = (表达式 for 变量 in 序列) ...

  • Day12学习总结-文件

    1.什么是生成式 生成式就是生成器的一种特殊写法 2.写法 a. 生成器 = (表达式 for 变量 in 序列)...

网友评论

    本文标题:Swift的生成器和序列(1)

    本文链接:https://www.haomeiwen.com/subject/dlwtuttx.html