Generic Initializer

init(_:)

Creates an iterator that wraps a base iterator but whose type depends only on the base iterator’s element type. 基盤イテレータをラップするイテレータを作成します、しかしそれの型は基盤イテレータのもつ要素型にのみ影響を受けます。

Declaration 宣言

init<I>(_ base: I) where Element == I.Element, I : IteratorProtocol

Parameters パラメータ

base

An iterator to type-erase. 型消去することになるイテレータ。

Discussion 解説

You can use AnyIterator to hide the type signature of a more complex iterator. For example, the digits() function in the following example creates an iterator over a collection that lazily maps the elements of a Range<Int> instance to strings. Instead of returning an iterator with a type that encapsulates the implementation of the collection, the digits() function first wraps the iterator in an AnyIterator instance. あなたはAnyIteratorを使って、あるより複雑なイテレータの型シグネチャを隠すことができます。例えば、以下の例のdigits()関数は、あるコレクションを覆うイテレータを作成します、それはRange<Int>インスタンスの要素を文字列へと遅延にマップします。このコレクションの実装をカプセル化するある型をもつイテレータを返すのではなく、digits()関数はイテレータをAnyIteratorインスタンスの中にまずラップします。


func digits() -> AnyIterator<String> {
    let lazyStrings = (0..<10).lazy.map { String($0) }
    let iterator:
        LazyMapSequence<Range<Int>, String>.Iterator
        = lazyStrings.makeIterator()


    return AnyIterator(iterator)
}