首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EnumerateGenerator和Tuple

EnumerateGenerator和Tuple
EN

Stack Overflow用户
提问于 2014-09-01 18:53:46
回答 1查看 522关注 0票数 2

枚举函数返回类型EnumerateGenerator。但是在Swift中,你可以使用它并分配给元组。EnumerateGenerator是如何变成元组的?

代码语言:javascript
复制
Definition: func enumerate<Seq : SequenceType>(seq: Seq) -> EnumerateGenerator<Seq.Generator>

for (index, value) in enumerate([1, 2, 3, 4, 5]) {
       // How does EnumerateGenerator become a tuple?
}

在EnumerateGenerator的定义中,元素被键入成一个元组,我是否正确地假设调用枚举()与调用EnumerateGenerator>next相同?

代码语言:javascript
复制
struct EnumerateGenerator<Base : GeneratorType> : GeneratorType, SequenceType {
    typealias Element = (index: Int, element: Base.Element)
    mutating func next() -> Element?
    typealias Generator = EnumerateGenerator<Base>
    func generate() -> EnumerateGenerator<Base>
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-01 19:58:06

来自Swift文档中的“为了-在声明”

for-in语句允许对集合(或任何类型)中符合SequenceType协议的每个项执行一次代码块。 在集合表达式上调用generate方法以获得生成器类型的值,即符合GeneratorType协议的类型。程序通过调用流上的下一个方法开始执行循环。如果返回的值不是None,则分配给item模式,程序执行语句,然后在循环开始时继续执行。否则,程序将不执行赋值或执行语句,并且它将完成for-in语句的执行。

所以

代码语言:javascript
复制
for (index, value) in enumerate([1, 2, 3, 4, 5]) {
    // ...
}

是相同的

代码语言:javascript
复制
let enumGenerator = enumerate([1, 2, 3, 4, 5])
var genFunc = enumGenerator.generate()
while let (index, value) = genFunc.next() {
    // ...
}
  • let enumGenerator = enumerate([1, 2, 3, 4, 5])返回一个EnumerateGenerator<Seq.Generator> (在本例中是EnumerateGenerator<IndexingGenerator<Array<Int>>>)。这符合SequenceType协议。
  • var genFunc = enumGenerator.generate()再次返回一个EnumerateGenerator<Seq.Generator> (可能是enumGenerator的副本)。这符合GeneratorType协议。
  • genFunc.next()返回Element?,其中Element(index: Int, element: Base.Element)的类型别名。 在本例中,next()返回(index: Int, element: Int)?。下一个函数返回可选的元组,直到数组用完为止,其中它返回nil
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25611526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档