Swift 枚举生成器和元组
枚举函数返回枚举生成器的类型。但在Swift中,您可以使用它并将其分配给tuple。枚举生成器如何成为元组Swift 枚举生成器和元组,swift,enumerate,Swift,Enumerate,枚举函数返回枚举生成器的类型。但在Swift中,您可以使用它并将其分配给tuple。枚举生成器如何成为元组 Definition: func enumerate<Seq : SequenceType>(seq: Seq) -> EnumerateGenerator<Seq.Generator> for (index, value) in enumerate([1, 2, 3, 4, 5]) { // How does EnumerateGenerat
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?
}
定义:func枚举(seq:seq)->枚举生成器
对于枚举([1,2,3,4,5])中的(索引,值){
//枚举生成器如何成为元组?
}
在EnumerateGenerator的定义中,元素被类型化为一个元组,我是否正确地假设调用enumerate()与调用EnumerateGenerator->next相同
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>
}
结构枚举生成器:GeneratorType,SequenceType{
typealias元素=(索引:Int,元素:Base.Element)
突变func next()->元素?
typealias生成器=枚举生成器
func generate()->枚举生成器
}
来自Swift文档:
for in语句允许一个代码块每次执行一次
集合(或任何类型)中符合SequenceType的项
协议
对集合表达式调用generate方法以获取
生成器类型的值,即符合
GeneratorType协议。程序通过调用
流上的下一个方法。如果返回的值不是None,则为
分配给项模式,程序执行语句,
然后在循环开始时继续执行。否则,,
程序不执行赋值或执行语句,以及
它完成了for in语句的执行
所以
与相同
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])
(在此 案例a枚举生成器
)。这符合法律规定枚举生成器
协议SequenceType
再次返回var genFunc=enumGenerator.generate()
(可能是枚举生成器
的副本)。 这符合枚举生成器
协议GeneratorType
返回genFunc.next()
其中Element?
是Element
在本例中,(索引:Int,元素:Base.element)
返回next()
。这是下一个函数 返回可选的元组,直到数组用尽为止,其中返回(索引:Int,元素:Int)?
nil
let enumGenerator = enumerate([1, 2, 3, 4, 5])
var genFunc = enumGenerator.generate()
while let (index, value) = genFunc.next() {
// ...
}