Generic Function

sequence(state:next:)

Returns a sequence formed from repeated lazy applications of next to a mutable state. 繰り返しnextを可変のstateに遅延適用することから形成されたシーケンスを返します。

Declaration 宣言

func sequence<T, State>(state: State, next: @escaping (inout State) -> T?) -> UnfoldSequence<T, State>

Parameters パラメータ

state

The initial state that will be passed to the closure. 初期状態、それはクロージャに渡されます。

next

A closure that accepts an inout state and returns the next element of the sequence. inout状態を受け取り、そしてそのシーケンスの次の要素を返すクロージャ。

Return Value 戻り値

A sequence that yields each successive value from next. あるシーケンス、それはnextから連続した値各々をもたらします。

Discussion 解説

The elements of the sequence are obtained by invoking next with a mutable state. The same state is passed to all invocations of next, so subsequent calls will see any mutations made by previous calls. The sequence ends when next returns nil. If next never returns nil, the sequence is infinite. シーケンスの要素は、 nextをある可変の状態とともに発動することによって入手されます。その同じ状態は、nextのすべてに呼び出しに対して渡されます、なので続いて起こる呼び出しは前の呼び出しによって為される何らかの変化を見ることになるでしょう。このシーケンスは、nextnilを返す時に終わります。nextが決してnilを返さないならば、 このシーケンスは果てがありません。

This function can be used to replace many instances of AnyIterator that wrap a closure. この関数は、クロージャをラップするAnyIteratorの多くのインスタンスを置き換えるのに使用できます。

Example: 例:


// Interleave two sequences that yield the same element type
sequence(state: (false, seq1.makeIterator(), seq2.makeIterator()), next: { iters in
  iters.0 = !iters.0
  return iters.0 ? iters.1.next() : iters.2.next()
})

See Also 参照

Dynamic Sequences 動的なシーケンス