Protocol - Sequence

public protocol Sequence {

    /// A type representing the sequence's elements.
    associatedtype Element where Self.Element == Self.Iterator.Element

    /// A type that provides the sequence's iteration interface and
    /// encapsulates its iteration state.
    associatedtype Iterator : IteratorProtocol

    /// Returns an iterator over the elements of this sequence.
    func makeIterator() -> Self.Iterator

    /// A value less than or equal to the number of elements in the sequence,
    /// calculated nondestructively.
    ///
    /// The default implementation returns 0. If you provide your own
    /// implementation, make sure to compute the value nondestructively.
    ///
    /// - Complexity: O(1), except if the sequence also conforms to `Collection`.
    ///   In this case, see the documentation of `Collection.underestimatedCount`.
    var underestimatedCount: Int { get }

    /// Call `body(p)`, where `p` is a pointer to the collection's
    /// contiguous storage.  If no such storage exists, it is
    /// first created.  If the collection does not support an internal
    /// representation in a form of contiguous storage, `body` is not
    /// called and `nil` is returned.
    ///
    /// A `Collection` that provides its own implementation of this method
    /// must also guarantee that an equivalent buffer of its `SubSequence` 
    /// can be generated by advancing the pointer by the distance to the
    /// slice's `startIndex`.
    func withContiguousStorageIfAvailable<R>(_ body: (UnsafeBufferPointer<Self.Element>) throws -> R) rethrows -> R?
}

Conforming Types AnySequence, Collection, Dictionary, DropFirstSequence, DropWhileSequence, EmptyCollection, EmptyCollection.Iterator, EnumeratedSequence, EnumeratedSequence.Iterator, FlattenSequence, IndexingIterator, IteratorSequence, JoinedSequence, LazyDropWhileSequence, LazyFilterSequence, LazyFilterSequence.Iterator, LazyMapSequence.Iterator, LazyPrefixWhileSequence, LazyPrefixWhileSequence.Iterator, LazySequence, LazySequenceProtocol, PrefixSequence, ReversedCollection, ReversedCollection.Iterator, Set, StrideThrough, StrideTo, UnfoldSequence, UnsafeBufferPointer, UnsafeMutableBufferPointer, UnsafeMutableRawBufferPointer, UnsafeRawBufferPointer, UnsafeRawBufferPointer.Iterator, Zip2Sequence

Associated Types

associatedtype Element
associatedtype Iterator

Sequence 序列 由于 associatedtype Iterator : IteratorProtocol 所以支持迭代器forin
作為數(shù)組的基礎(chǔ), 它賦予了數(shù)組遍歷的能力,從前、后取值以及各種高階函數(shù)的能力。
但是他不具備 「索引」的能力, 無(wú)法取出序列中的第N個(gè)數(shù)值, 只能遍歷找到他。
當(dāng)你進(jìn)行數(shù)據(jù)操作時(shí)候,你覺(jué)得需要正、反向遍歷時(shí)候, 不妨考慮一下sequence協(xié)議。
另外索引的能力在稍后介紹的 collection 協(xié)議中。

    @inlinable public func shuffled<T>(using generator: inout T) -> [Self.Element] where T : RandomNumberGenerator
    @inlinable public func shuffled() -> [Self.Element]
    @inlinable public var lazy: LazySequence<Self> { get }

    @available(swift, deprecated: 4.1, renamed: "compactMap(_:)", message: "Please use compactMap(_:) for the case where closure returns an optional value")
    public func flatMap<ElementOfResult>(_ transform: (Self.Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]

    @inlinable public func map<T>(_ transform: (Self.Element) throws -> T) rethrows -> [T]

    @inlinable public func filter(_ isIncluded: (Self.Element) throws -> Bool) rethrows -> [Self.Element]

    @inlinable public var underestimatedCount: Int { get }

    @inlinable public func forEach(_ body: (Self.Element) throws -> Void) rethrows

    @inlinable public func first(where predicate: (Self.Element) throws -> Bool) rethrows -> Self.Element?
    // 數(shù)組分割
    @inlinable public func split(maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true, whereSeparator isSeparator: (Self.Element) throws -> Bool) rethrows -> [ArraySlice<Self.Element>]
     // 獲取數(shù)組的后N個(gè)
    @inlinable public func suffix(_ maxLength: Int) -> [Self.Element]
    // 這個(gè)與js類似了, 從前面去sequence的N個(gè)元素, 返回新的sequence
    @inlinable public func dropFirst(_ k: Int = 1) -> DropFirstSequence<Self>
    // 后面
    @inlinable public func dropLast(_ k: Int = 1) -> [Self.Element]

    @inlinable public func drop(while predicate: (Self.Element) throws -> Bool) rethrows -> DropWhileSequence<Self>
     // 獲取sequence前N位
    @inlinable public func prefix(_ maxLength: Int) -> PrefixSequence<Self>

    @inlinable public func prefix(while predicate: (Self.Element) throws -> Bool) rethrows -> [Self.Element]
    // 需要研究
    @inlinable public func withContiguousStorageIfAvailable<R>(_ body: (UnsafeBufferPointer<Self.Element>) throws -> R) rethrows -> R?

    @inlinable public func enumerated() -> EnumeratedSequence<Self>

    @warn_unqualified_access
    @inlinable public func min(by areInIncreasingOrder: (Self.Element, Self.Element) throws -> Bool) rethrows -> Self.Element?

    @warn_unqualified_access
    @inlinable public func max(by areInIncreasingOrder: (Self.Element, Self.Element) throws -> Bool) rethrows -> Self.Element?
    // 數(shù)組是否以某個(gè)數(shù)組開頭
    @inlinable public func starts<PossiblePrefix>(with possiblePrefix: PossiblePrefix, by areEquivalent: (Self.Element, PossiblePrefix.Element) throws -> Bool) rethrows -> Bool where PossiblePrefix : Sequence
    // 比較兩個(gè)數(shù)組是否相同
    @inlinable public func elementsEqual<OtherSequence>(_ other: OtherSequence, by areEquivalent: (Self.Element, OtherSequence.Element) throws -> Bool) rethrows -> Bool where OtherSequence : Sequence

    @inlinable public func lexicographicallyPrecedes<OtherSequence>(_ other: OtherSequence, by areInIncreasingOrder: (Self.Element, Self.Element) throws -> Bool) rethrows -> Bool where OtherSequence : Sequence, Self.Element == OtherSequence.Element

    @inlinable public func contains(where predicate: (Self.Element) throws -> Bool) rethrows -> Bool
    // 是否都滿足某個(gè)條件
    @inlinable public func allSatisfy(_ predicate: (Self.Element) throws -> Bool) rethrows -> Bool

    @inlinable public func reduce<Result>(_ initialResult: Result, _ nextPartialResult: (Result, Self.Element) throws -> Result) rethrows -> Result

    @inlinable public func reduce<Result>(into initialResult: Result, _ updateAccumulatingResult: (inout Result, Self.Element) throws -> ()) rethrows -> Result

    @inlinable public func reversed() -> [Self.Element]

    @inlinable public func flatMap<SegmentOfResult>(_ transform: (Self.Element) throws -> SegmentOfResult) rethrows -> [SegmentOfResult.Element] where SegmentOfResult : Sequence

    @inlinable public func compactMap<ElementOfResult>(_ transform: (Self.Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]

    @inlinable public func sorted(by areInIncreasingOrder: (Self.Element, Self.Element) throws -> Bool) rethrows -> [Self.Element]
extension Sequence where Self.Element : Sequence {
    @inlinable public func joined() -> FlattenSequence<Self>
    @inlinable public func joined<Separator>(separator: Separator) -> JoinedSequence<Self> where Separator : Sequence, Separator.Element == Self.Element.Element
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容