文書   >   Swift 標準ライブラリ >     Collections   >   Sequence and Collection   >   Sequence


プロトコル


Sequence


その要素への反復された連続アクセスを提供する型。





概観


シーケンス (sequence) とは、一度に 1 つずつ進めることができる値のリストの事です。シーケンスの要素を反復する最も一般的な方法は、for-in ループを使用することです。


let oneTwoThree = 1...3
for number in oneTwoThree {
    print(number)
}
// Prints "1"
// Prints "2"
// Prints "3"


一見簡単ですが、この機能を使用すると、任意のシーケンスで実行できる多くの操作にアクセスできます。たとえば、シーケンスに特定の値が含まれているかどうかを確認するには、一致するものが見つかるまで、またはシーケンスの最後に達するまで、各値を順次テストできます。この例では、特定の昆虫が配列内にあるかどうかを調べます。


let bugs = ["Aphid", "Bumblebee", "Cicada", "Damselfly", "Earwig"]
var hasMosquito = false
for bug in bugs {
    if bug == "Mosquito" {
        hasMosquito = true
        break
    }
}
print("'bugs' has a mosquito: \(hasMosquito)")
// Prints "'bugs' has a mosquito: false"


Sequence プロトコルは、シーケンスの値への順次アクセスに依存する多くの一般的な操作のデフォルトの実装を提供します。もっとはっきりと、簡潔なコードにすると、上記の例では、配列の contains(_:) メソッドを使用することができ、これは、すべてのシーケンスが Sequence から継承され、手動で反復される事に代わるものです。


if bugs.contains("Mosquito") {
    print("Break out the bug spray.")
} else {
    print("Whew, no mosquitos!")
}
// Prints "Whew, no mosquitos!"


反復されたアクセス


Sequence プロトコルは、反復処理によって破壊的に消費されるかどうかに関して、準拠型には要件はありません。結果として、シーケンス上の複数の for-in ループが初めから反復を再開するか、再起動すると仮定しないでください。


for element in sequence {
    if ... some condition { break }
}

for element in sequence {
    // No defined behavior
}


この場合、シーケンスが消耗して反復を再開するか、シーケンスがコレクションであり、最初の要素から反復を再開するかは想定できません。コレクションではない、準拠するシーケンスは、2 番目の for-in ループで要素の任意のシーケンスを生成することができます。


作成した型が非破壊的な反復をサポートしていることを確認するには、Collection プロトコルへの準拠を追加して下さい。


Sequence プロトコルへの準拠


独自のカスタム型を Sequence に準拠させることで、for-in ループや contains メソッドなどの多くの便利な操作が可能になります。独自のカスタム型に Sequence の準拠性を追加するには、反復を返す makeIterator( ) メソッドを追加して下さい。


また、あなたの型が独自の反復として動作できる場合は、IteratorProtocol プロトコルの要件を実装し、SequenceIteratorProtocol の両方に準拠を宣言するだけで十分です。


ここでは、独自の反復として機能する Countdown シーケンスの定義を示します。makeIterator( ) メソッドは、デフォルトの実装として提供されています。


struct Countdown: Sequence, IteratorProtocol {
    var count: Int

    mutating func next() -> Int? {
        if count == 0 {
            return nil
        } else {
            defer { count -= 1 }
            return count
        }
    }
}

let threeToGo = Countdown(count: 3)
for i in threeToGo {
    print(i)
}
// Prints "3"
// Prints "2"
// Prints "1"


期待されるパフォーマンス


シーケンスは O(1) に反復を提供する必要があります。Sequence プロトコルは要素アクセスに関する他の要件がないため、シーケンスを横断するルーチンは、特に明記されていない限り、O(n) とみなされます。


トピックス





繰り返しの作成





要素の検索





要素の選択





要素の除外





シーケンスの変換





シーケンスの要素を繰り返し処理





要素の並べ替え





要素の分割と結合





シーケンスの比較





あまり使用されない機能


func clip()





インスタンスプロパティ





インスタンスメソッド


関連





以下により継承





以下により採用


  • AnyIterator
  • AnySequence
  • AVCaptureSynchronizedData
    Collection
  • Character.UnicodeScalarView
  • CountablePartialRangeFrom
  • Dictionary
  • DispatchDataIterator
  • EmptyIterator
  • EnumeratedIterator
  • EnumeratedSequence
  • FileManager.Directory
    Enumerator
  • FlattenIterator
  • FlattenSequence
  • IndexingIterator
  • IteratorOverOne
  • IteratorSequence
  • JoinedSequence
  • LazyCollection
  • LazyDropWhileIterator
  • LazyFilterCollection
  • LazyFilterIterator
  • LazyMapIterator
  • LazyPrefixWhileIterator
  • NSArray
  • NSCountedSet
  • NSDictionary
  • NSEnumerator
  • NSIndexSet
  • NSMutableArray
  • NSMutableDictionary
  • NSMutableIndexSet
  • NSMutableOrderedSet
  • NSMutableSet
  • NSOrderedSet
  • NSSet
  • ReversedCollection.Iterator
  • SBElementArray
  • Set
  • StrideThrough
  • StrideTo
  • UnfoldSequence
  • UnsafeBufferPointerIterator
  • UnsafeMutableRawBufferPointer
  • UnsafeMutableRawBufferPointer
    .Iterator
  • UnsafeRawBufferPointer
  • UnsafeRawBufferPointer
    .Iterator
  • Zip2Sequence




以下も見よ





第一段階


ベータ ソフトウェア

この文書には、開発中の API または技術に関する予備的な情報が含まれています。この情報は変更されることがあり、この文書に従って実装されたソフトウェアは、最終的なオペレーティングシステムソフトウェアでテストする必要があります。

Apple のベータ版ソフトウェアの使用方法の詳細 >





目次
Xcode 10 の新機能

  • 言語:Swift
  • SDK
  • Xcode 8.0+
  • フレームワーク
  • Swift 標準ライブラリ
  • 概観
  • トピックス
  • 関連












  • トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)












    トップへ(Swift 標準ライブラリ)