Sequence in Swift

作者: 乐视薯片 | 来源:发表于2017-03-29 16:12 被阅读35次

Swift 语言中提供了一种 for .. in 语法的形式,用于遍历集合,比如对于 Array 类型,就可以用 for .. in 来进行遍历。我们也可以让我们自己的类也支持这个语法。这里主要是实现Sequence协议,具体怎么实现呢,我们来举个例子。

首先,定义一个我们自己的类Person

class Person{

      var name:String = ""

      var sex:String = ""

     init(name:String,sex:String){

            self.name = name

            self.sex = sex

     }

}

接下来,我们定义一个PersonList类,让其实现Sequence协议,这里需要实现两处,一个是属性iterator,另一个是方法makeIterator(),而这里又需要iteratorType,具体是这样的:

classPersonList:Sequence{

privatevarpersonList:[Person]?

init() {

self.personList= [Person]()

}

typealiasIterator =PersonListIterator

funcmakeIterator() ->PersonListIterator{

returnPersonListIterator(personList:self.personList!)

}

funcaddPerson(person:Person){

self.personList?.append(person)

}

}

下面需要实现PersonListIteratorPerson,该类实现IteratorProtocol协议,有两个地方需要实现,一个是属性Element,一个是next()方法,即如何进行遍历:

classPersonListIterator:IteratorProtocol{

typealiasElement =Person

varcurrentIndex:Int=0

varpersonList:[Person]?

init(personList:[Person]) {

self.personList= personList

}

funcnext() ->Person? {

guardletlist =personListelse{

returnnil

}

ifcurrentIndex

letelement = list[currentIndex]

currentIndex+=1

returnelement

}

else

{

returnnil

}

}

}

创建一个我们建立的personlist对象,进行遍历:

varpersonlist =PersonList()

personlist.addPerson(person:Person(name:"aa",sex:"23"))

personlist.addPerson(person:Person(name:"bb",sex:"32"))

personlist.addPerson(person:Person(name:"cc",sex:"28"))

forpersoninpersonlist{

print("\(person.name),\(person.sex)")

}

你会看到结果

证明我们成功实现了利用for..in来遍历对象,那么我们换个遍历方式,倒序遍历,只需改变next()方法即可,那么我们来创建一个倒序遍历的iterator类

classPersonListReverseIterator:IteratorProtocol{

typealiasElement =Person

varpersonList:[Person]?

varcurrentIndex:Int=0

init(personList:[Person]) {

self.personList= personList

currentIndex= personList.count-1

}

funcnext() ->Person? {

guardletlist =personListelse{

returnnil

}

ifcurrentIndex>=0{

letelement = list[currentIndex]

currentIndex-=1

returnelement

}

else

{

returnnil

}

}

}

然后,改变PersonList中Iterator类型,即可实现。

有什么问题,欢迎指正!

相关文章

  • Sequence in Swift

    Swift 语言中提供了一种 for .. in 语法的形式,用于遍历集合,比如对于 Array 类型,就可以用 ...

  • Sequence in swift

    begin with one quickSort 之前在学习时曾看到swift如此简洁地表达出了快排算法。 时虽叹...

  • # Swift 集合类型之迭代器

    我们知道在 Swift 中 Sequence 是 集合类型结构 中的基础。而在 Sequence 协议的定义当中我...

  • Swift 源码解读 - Sequence.swift

    在 Map.swift 源码解读 中,多处涉及到 Sequence 的内容,今天抽时间来阅读下 Sequence....

  • Swift 中的 Sequence(二)

    接上篇 Swift 中的 Sequence(一) 撰写本文时 Swift 版本是 4.0 beta。 值类型 It...

  • Swift Sequence(序列) & Collection(

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

  • Swift Sequence实现

    MySequence使用

  • swift-Sequence

    Iterators 在我们研究Sequence之前,我们先从我们日常比较常见的一段代码入手: 系统的底层是如何实现...

  • Swift标准库源码之旅 - Zip.swift

    zip在Swift里是一个全局函数,参数接收两个Sequence,返回一个可以遍历两个sequence的Eleme...

  • swift-sequence 序列

    swift下有许多的高阶函数如:map 重对应的一个类型映射到另一个类型的整合函数 这样就可以实现对自定义对象

网友评论

    本文标题:Sequence in Swift

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