当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Swift IndexingIterator用法及代码示例


结构

IndexingIterator

一种使用其索引迭代集合的类型。

声明

@frozen struct IndexingIterator<Elements> where Elements : Collection

概述

IndexingIterator 类型是任何未声明自己的集合的默认迭代器。它通过使用集合的索引来遍历集合中的每个值,从而充当迭代器。标准库中的大多数集合都使用IndexingIterator 作为它们的迭代器。

默认情况下,您创建的任何自定义集合类型都将继承一个返回 IndexingIterator 实例的 makeIterator() 方法,因此无需声明您自己的。创建自定义集合类型时,添加Collection 协议的最低要求:开始和结束索引以及访问元素的下标。定义了这些元素后,继承的makeIterator() 方法满足Sequence 协议的要求。

这是一个声明集合的最低要求的类型示例。 CollectionOfTwo 结构是一个固定大小的集合,它始终包含两个特定类型的元素。


struct CollectionOfTwo<Element>: Collection {
    let elements: (Element, Element)


    init(_ first: Element, _ second: Element) {
        self.elements = (first, second)
    }


    var startIndex: Int { return 0 }
    var endIndex: Int   { return 2 }


    subscript(index: Int) -> Element {
        switch index {
        case 0: return elements.0
        case 1: return elements.1
        default: fatalError("Index out of bounds.")
        }
    }
    
    func index(after i: Int) -> Int {
        precondition(i < endIndex, "Can't advance beyond endIndex")
        return i + 1
    }
}

因为 CollectionOfTwo 没有定义自己的 makeIterator() 方法或 Iterator 关联类型,所以它使用默认迭代器类型 IndexingIterator 。这个例子展示了如何创建一个 CollectionOfTwo 实例来保存一个点的值,然后使用 for - in 循环进行迭代。


let point = CollectionOfTwo(15.0, 20.0)
for element in point {
    print(element)
}
// Prints "15.0"
// Prints "20.0"

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相关用法


注:本文由纯净天空筛选整理自apple.com大神的英文原创作品 IndexingIterator。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。