protocol CollectionType A multi-pass sequence with addressable positions. Positions are represented by an associated Index type. Whereas an arbitrary sequence may be consumed as it is traversed, a collection is multi-pass: any element may be revisited merely by saving its index. The sequence view of the elements is identical to the collection view. In other words, the following code binds the same series of values to x as does for x in self {}: for i in startIndex..<endIndex { let x = self[i] } Inheritance Indexable, SequenceType View Protocol Hierarchy → Associated Types Generator : GeneratorType = IndexingGenerator<Self> A type that provides the sequence's iteration interface and encapsulates its iteration state. By default, a CollectionType satisfies SequenceType by supplying an IndexingGenerator as its associated Generator type. SubSequence : Indexable, SequenceType = Slice<Self> A SequenceType that can represent a contiguous subrange of self's elements. Note: This associated type appears as a requirement in SequenceType, but is restated here with stricter constraints: in a CollectionType, the SubSequence should also be a CollectionType. Index : ForwardIndexType A type that represents a valid position in the collection. Valid indices consist of the position of every element and a "past the end" position that's not valid for use as a subscript. Import import Swift Instance Variables var count: Self.Index.Distance Returns the number of elements. Complexity: O(1) if Index conforms to RandomAccessIndexType; O(N) otherwise. Declaration var count: Self.Index.Distance { get } var first: Self.Generator.Element? Returns the first element of self, or nil if self is empty. Declaration var first: Self.Generator.Element? { get } var isEmpty: Bool Returns true iff self is empty. Declaration var isEmpty: Bool { get } var endIndex: Self.Index Required The collection's "past the end" position. endIndex is not a valid argument to subscript, and is always reachable from startIndex by zero or more applications of successor(). Complexity: O(1) Declaration var endIndex: Self.Index { get } Declared In Indexable var startIndex: Self.Index Required The position of the first element in a non-empty collection. In an empty collection, startIndex == endIndex. Complexity: O(1) Declaration var startIndex: Self.Index { get } Declared In Indexable Subscripts subscript(_: Range<Self.Index>) Required Returns a collection representing a contiguous sub-range of self's elements. Complexity: O(1) Declaration subscript(bounds: Range<Self.Index>) -> Self.SubSequence { get } subscript(_: Self.Index) Required Returns the element at the given position. Declaration subscript(position: Self.Index) -> Self.Generator.Element { get } Declared In CollectionType, Indexable Instance Methods func dropFirst(_:) Returns a subsequence containing all but the first n elements. Requires: n >= 0 Complexity: O(n) Declaration func dropFirst(n: Int) -> Self.SubSequence Declared In SequenceType func dropLast(_:) Returns a subsequence containing all but the last n elements. Requires: self is a finite sequence. Requires: n >= 0 Complexity: O(self.count) Declaration func dropLast(n: Int) -> Self.SubSequence Declared In SequenceType func filter(_:) Returns an Array containing the elements of self, in order, that satisfy the predicate includeElement. Declaration func filter(@noescape includeElement: (Self.Generator.Element) throws -> Bool) rethrows -> [Self.Generator.Element] Declared In SequenceType func forEach(_:) Call body on each element in self in the same order as a for-in loop. sequence.forEach { // body code } is similar to: for element in sequence { // body code } Note: You cannot use the break or continue statement to exit the current call of the body closure or skip subsequent calls. Note: Using the return statement in the body closure will only exit from the current call to body, not any outer scope, and won't skip subsequent calls. Complexity: O(self.count) Declaration func forEach(@noescape body: (Self.Generator.Element) throws -> Void) rethrows Declared In SequenceType func generate() Required Declaration func generate() -> Self.Generator Declared In CollectionType, SequenceType func map(_:) Returns an Array containing the results of mapping transform over self. Complexity: O(N). Declaration func map<T>(@noescape transform: (Self.Generator.Element) throws -> T) rethrows -> [T] Declared In SequenceType func prefix(_:) Returns a subsequence, up to maxLength in length, containing the initial elements. If maxLength exceeds self.count, the result contains all the elements of self. Requires: maxLength >= 0 Declaration func prefix(maxLength: Int) -> Self.SubSequence Declared In SequenceType func prefixThrough(_:) Returns prefixUpTo(position.successor()) Complexity: O(1) Declaration func prefixThrough(position: Self.Index) -> Self.SubSequence func prefixUpTo(_:) Returns self[startIndex..<end] Complexity: O(1) Declaration func prefixUpTo(end: Self.Index) -> Self.SubSequence func split(_:allowEmptySlices:isSeparator:) Returns the maximal SubSequences of self, in order, that don't contain elements satisfying the predicate isSeparator. maxSplit: The maximum number of SubSequences to return, minus 1. If maxSplit + 1 SubSequences are returned, the last one is a suffix of self containing the remaining elements. The default value is Int.max. allowEmptySubsequences: If true, an empty SubSequence is produced in the result for each pair of consecutive elements satisfying isSeparator. The default value is false. Requires: maxSplit >= 0 Declaration func split(maxSplit: Int, allowEmptySlices: Bool, @noescape isSeparator: (Self.Generator.Element) throws -> Bool) rethrows -> [Self.SubSequence] Declared In SequenceType func suffix(_:) Returns a slice, up to maxLength in length, containing the final elements of s. If maxLength exceeds s.count, the result contains all the elements of s. Requires: self is a finite sequence. Requires: maxLength >= 0 Declaration func suffix(maxLength: Int) -> Self.SubSequence Declared In SequenceType func suffixFrom(_:) Returns self[start..<endIndex] Complexity: O(1) Declaration func suffixFrom(start: Self.Index) -> Self.SubSequence func underestimateCount() Returns a value less than or equal to the number of elements in self, nondestructively. Complexity: O(N). Declaration func underestimateCount() -> Int Declared In SequenceType Default Implementations var count: Self.Index.Distance Returns the number of elements. Complexity: O(1) if Index conforms to RandomAccessIndexType; O(N) otherwise. Declaration var count: Self.Index.Distance { get } var first: Self.Generator.Element? Returns the first element of self, or nil if self is empty. Complexity: O(1) Declaration var first: Self.Generator.Element? { get } var indices: Range<Self.Index> Returns the range of valid index values. The result's endIndex is the same as that of self. Because Range is half-open, iterating the values of the result produces all valid subscript arguments for self, omitting its endIndex. Declaration var indices: Range<Self.Index> { get } var isEmpty: Bool Returns true iff self is empty. Complexity: O(1) Declaration var isEmpty: Bool { get } var lazy: LazyCollection<Self> A collection with contents identical to self, but on which normally-eager operations such as map and filter are implemented lazily. See Also: LazySequenceType, LazyCollectionType. Declaration var lazy: LazyCollection<Self> { get } func contains(_:) Returns true iff an element in self satisfies predicate. Declaration func contains(@noescape predicate: (Self.Generator.Element) throws -> Bool) rethrows -> Bool Declared In SequenceType func dropFirst() Returns a subsequence containing all but the first element. Complexity: O(1) Declaration func dropFirst() -> Self.SubSequence Declared In SequenceType func dropFirst(_:) Returns a subsequence containing all but the first n elements. Requires: n >= 0 Complexity: O(n) Declaration func dropFirst(n: Int) -> Self.SubSequence func dropLast() Returns a subsequence containing all but the last element. Requires: self is a finite sequence. Complexity: O(self.count) Declaration func dropLast() -> Self.SubSequence Declared In SequenceType func dropLast(_:) Returns a subsequence containing all but the last n elements. Requires: n >= 0 Complexity: O(self.count) Declaration func dropLast(n: Int) -> Self.SubSequence func elementsEqual(_:isEquivalent:) Returns true iff self and other contain equivalent elements, using isEquivalent as the equivalence test. Requires: isEquivalent is an equivalence relation. Declaration func elementsEqual<OtherSequence : SequenceType where OtherSequence.Generator.Element == Generator.Element>(other: OtherSequence, @noescape isEquivalent: (Self.Generator.Element, Self.Generator.Element) throws -> Bool) rethrows -> Bool Declared In SequenceType func enumerate() Returns a lazy SequenceType containing pairs (n, x), where ns are consecutive Ints starting at zero, and xs are the elements of base: > for (n, c) in "Swift".characters.enumerate() { print("\(n): '\(c)'") } 0: 'S' 1: 'w' 2: 'i' 3: 'f' 4: 't' Declaration func enumerate() -> EnumerateSequence<Self> Declared In SequenceType func filter(_:) Returns an Array containing the elements of self, in order, that satisfy the predicate includeElement. Declaration func filter(@noescape includeElement: (Self.Generator.Element) throws -> Bool) rethrows -> [Self.Generator.Element] Declared In SequenceType func flatMap<T>(_: (Self.Generator.Element) throws -> T?) Returns an Array containing the non-nil results of mapping transform over self. Complexity: O(M + N), where M is the length of self and N is the length of the result. Declaration func flatMap<T>(@noescape transform: (Self.Generator.Element) throws -> T?) rethrows -> [T] Declared In SequenceType func flatMap<S : SequenceType>(_: (Self.Generator.Element) throws -> S) Returns an Array containing the concatenated results of mapping transform over self. s.flatMap(transform) is equivalent to Array(s.map(transform).flatten()) Complexity: O(M + N), where M is the length of self and N is the length of the result. Declaration func flatMap<S : SequenceType>(transform: (Self.Generator.Element) throws -> S) rethrows -> [S.Generator.Element] Declared In SequenceType func forEach(_:) Call body on each element in self in the same order as a for-in loop. sequence.forEach { // body code } is similar to: for element in sequence { // body code } Note: You cannot use the break or continue statement to exit the current call of the body closure or skip subsequent calls. Note: Using the return statement in the body closure will only exit from the current call to body, not any outer scope, and won't skip subsequent calls. Complexity: O(self.count) Declaration func forEach(@noescape body: (Self.Generator.Element) throws -> Void) rethrows Declared In SequenceType func indexOf(_:) Returns the first index where predicate returns true for the corresponding value, or nil if such value is not found. Complexity: O(self.count). Declaration func indexOf(@noescape predicate: (Self.Generator.Element) throws -> Bool) rethrows -> Self.Index? func lexicographicalCompare(_:isOrderedBefore:) Returns true iff self precedes other in a lexicographical ("dictionary") ordering, using isOrderedBefore as the comparison between elements. Note: This method implements the mathematical notion of lexicographical ordering, which has no connection to Unicode. If you are sorting strings to present to the end-user, you should use String APIs that perform localized comparison. Requires: isOrderedBefore is a strict weak ordering over the elements of self and other. Declaration func lexicographicalCompare<OtherSequence : SequenceType where OtherSequence.Generator.Element == Generator.Element>(other: OtherSequence, @noescape isOrderedBefore: (Self.Generator.Element, Self.Generator.Element) throws -> Bool) rethrows -> Bool Declared In SequenceType func map(_:) Returns an Array containing the results of mapping transform over self. Complexity: O(N). Declaration func map<T>(@noescape transform: (Self.Generator.Element) throws -> T) rethrows -> [T] Declared In CollectionType, SequenceType func maxElement(_:) Returns the maximum element in self or nil if the sequence is empty. Complexity: O(elements.count). Requires: isOrderedBefore is a strict weak ordering over self. Declaration func maxElement(@noescape isOrderedBefore: (Self.Generator.Element, Self.Generator.Element) throws -> Bool) rethrows -> Self.Generator.Element? Declared In SequenceType func minElement(_:) Returns the minimum element in self or nil if the sequence is empty. Complexity: O(elements.count). Requires: isOrderedBefore is a strict weak ordering over self. Declaration func minElement(@noescape isOrderedBefore: (Self.Generator.Element, Self.Generator.Element) throws -> Bool) rethrows -> Self.Generator.Element? Declared In SequenceType func prefix(_:) Returns a subsequence, up to maxLength in length, containing the initial elements. If maxLength exceeds self.count, the result contains all the elements of self. Requires: maxLength >= 0 Complexity: O(maxLength) Declaration func prefix(maxLength: Int) -> Self.SubSequence func prefixThrough(_:) Returns prefixUpTo(position.successor()) Complexity: O(1) Declaration func prefixThrough(position: Self.Index) -> Self.SubSequence func prefixUpTo(_:) Returns self[startIndex..<end] Complexity: O(1) Declaration func prefixUpTo(end: Self.Index) -> Self.SubSequence func reduce(_:combine:) Returns the result of repeatedly calling combine with an accumulated value initialized to initial and each element of self, in turn, i.e. return combine(combine(...combine(combine(initial, self[0]), self[1]),...self[count-2]), self[count-1]). Declaration func reduce<T>(initial: T, @noescape combine: (T, Self.Generator.Element) throws -> T) rethrows -> T Declared In SequenceType func reverse() Returns an Array containing the elements of self in reverse order. Complexity: O(N), where N is the length of self. Declaration func reverse() -> [Self.Generator.Element] Declared In SequenceType func sort(_:) Returns an Array containing the sorted elements of source according to isOrderedBefore. The sorting algorithm is not stable (can change the relative order of elements for which isOrderedBefore does not establish an order). Requires: isOrderedBefore is a strict weak ordering over the elements in self. Declaration func sort(@noescape isOrderedBefore: (Self.Generator.Element, Self.Generator.Element) -> Bool) -> [Self.Generator.Element] Declared In SequenceType func split(_:allowEmptySlices:isSeparator:) Returns the maximal SubSequences of self, in order, that don't contain elements satisfying the predicate isSeparator. maxSplit: The maximum number of SubSequences to return, minus 1. If maxSplit + 1 SubSequences are returned, the last one is a suffix of self containing the remaining elements. The default value is Int.max. allowEmptySubsequences: If true, an empty SubSequence is produced in the result for each pair of consecutive elements satisfying isSeparator. The default value is false. Requires: maxSplit >= 0 Declaration func split(maxSplit: Int = default, allowEmptySlices: Bool = default, @noescape isSeparator: (Self.Generator.Element) throws -> Bool) rethrows -> [Self.SubSequence] Declared In CollectionType, SequenceType func startsWith(_:isEquivalent:) Returns true iff self begins with elements equivalent to those of other, using isEquivalent as the equivalence test. Returns true if other is empty. Requires: isEquivalent is an equivalence relation. Declaration func startsWith<OtherSequence : SequenceType where OtherSequence.Generator.Element == Generator.Element>(other: OtherSequence, @noescape isEquivalent: (Self.Generator.Element, Self.Generator.Element) throws -> Bool) rethrows -> Bool Declared In SequenceType func suffix(_:) Returns a slice, up to maxLength in length, containing the final elements of s. If maxLength exceeds s.count, the result contains all the elements of s. Requires: maxLength >= 0 Complexity: O(self.count) Declaration func suffix(maxLength: Int) -> Self.SubSequence Declared In CollectionType, SequenceType func suffixFrom(_:) Returns self[start..<endIndex] Complexity: O(1) Declaration func suffixFrom(start: Self.Index) -> Self.SubSequence func underestimateCount() Returns a value less than or equal to the number of elements in self, nondestructively. Complexity: O(N). Declaration func underestimateCount() -> Int Declared In CollectionType, SequenceType Where Generator == IndexingGenerator func generate() Declaration func generate() -> IndexingGenerator<Self> Where Generator == Self, Self : GeneratorType func generate() Returns a generator over the elements of this sequence. Complexity: O(1). Declaration func generate() -> Self Declared In SequenceType Where Generator.Element : CollectionType func flatten() A concatenation of the elements of self. Declaration func flatten() -> FlattenCollection<Self> Where Generator.Element : CollectionType, Index : BidirectionalIndexType, Generator.Element.Index : BidirectionalIndexType func flatten() A concatenation of the elements of self. Declaration func flatten() -> FlattenBidirectionalCollection<Self> Where Generator.Element : Comparable func lexicographicalCompare(_:) Returns true iff self precedes other in a lexicographical ("dictionary") ordering, using "<" as the comparison between elements. Note: This method implements the mathematical notion of lexicographical ordering, which has no connection to Unicode. If you are sorting strings to present to the end-user, you should use String APIs that perform localized comparison. Declaration func lexicographicalCompare<OtherSequence : SequenceType where OtherSequence.Generator.Element == Generator.Element>(other: OtherSequence) -> Bool Declared In SequenceType func maxElement() Returns the maximum element in self or nil if the sequence is empty. Complexity: O(elements.count). Declaration func maxElement() -> Self.Generator.Element? Declared In SequenceType func minElement() Returns the minimum element in self or nil if the sequence is empty. Complexity: O(elements.count). Declaration func minElement() -> Self.Generator.Element? Declared In SequenceType func sort() Returns an Array containing the sorted elements of source. The sorting algorithm is not stable (can change the relative order of elements that compare equal). Requires: The less-than operator (func <) defined in the Comparable conformance is a strict weak ordering over the elements in self. Declaration func sort() -> [Self.Generator.Element] Declared In SequenceType Where Generator.Element : Equatable func contains(_:) Returns true iff element is in self. Declaration func contains(element: Self.Generator.Element) -> Bool Declared In SequenceType func elementsEqual(_:) Returns true iff self and other contain the same elements in the same order. Declaration func elementsEqual<OtherSequence : SequenceType where OtherSequence.Generator.Element == Generator.Element>(other: OtherSequence) -> Bool Declared In SequenceType func indexOf(_:) Returns the first index where value appears in self or nil if value is not found. Complexity: O(self.count). Declaration func indexOf(element: Self.Generator.Element) -> Self.Index? func split(_:maxSplit:allowEmptySlices:) Returns the maximal SubSequences of self, in order, around a separator element. maxSplit: The maximum number of SubSequences to return, minus 1. If maxSplit + 1 SubSequences are returned, the last one is a suffix of self containing the remaining elements. The default value is Int.max. allowEmptySubsequences: If true, an empty SubSequence is produced in the result for each pair of consecutive elements satisfying isSeparator. The default value is false. Requires: maxSplit >= 0 Declaration func split(separator: Self.Generator.Element, maxSplit: Int = default, allowEmptySlices: Bool = default) -> [Self.SubSequence] Declared In CollectionType, SequenceType func startsWith(_:) Returns true iff the initial elements of self are equal to prefix. Returns true if other is empty. Declaration func startsWith<OtherSequence : SequenceType where OtherSequence.Generator.Element == Generator.Element>(other: OtherSequence) -> Bool Declared In SequenceType Where Generator.Element : SequenceType func flatten() A concatenation of the elements of self. Declaration func flatten() -> FlattenSequence<Self> Declared In SequenceType func joinWithSeparator(_:) Returns a view, whose elements are the result of interposing a given separator between the elements of the sequence self. For example, [[1, 2, 3], [4, 5, 6], [7, 8, 9]].joinWithSeparator([-1, -2]) yields [1, 2, 3, -1, -2, 4, 5, 6, -1, -2, 7, 8, 9]. Declaration func joinWithSeparator<Separator : SequenceType where Separator.Generator.Element == Generator.Element.Generator.Element>(separator: Separator) -> JoinSequence<Self> Declared In SequenceType Where Generator.Element == String func joinWithSeparator(_:) Interpose the separator between elements of self, then concatenate the result. For example: ["foo", "bar", "baz"].joinWithSeparator("-|-") // "foo-|-bar-|-baz" Declaration func joinWithSeparator(separator: String) -> String Declared In SequenceType Where Index : BidirectionalIndexType var last: Self.Generator.Element? Declaration var last: Self.Generator.Element? { get } func dropLast(_:) Returns a subsequence containing all but the last n elements. Requires: n >= 0 Complexity: O(n) Declaration func dropLast(n: Int) -> Self.SubSequence func reverse() Returns the elements of self in reverse order. Complexity: O(1) Declaration func reverse() -> ReverseCollection<Self> func suffix(_:) Returns a slice, up to maxLength in length, containing the final elements of s. If maxLength exceeds s.count, the result contains all the elements of s. Requires: maxLength >= 0 Complexity: O(maxLength) Declaration func suffix(maxLength: Int) -> Self.SubSequence Where Index : RandomAccessIndexType func reverse() Returns the elements of self in reverse order. Complexity: O(1) Declaration func reverse() -> ReverseRandomAccessCollection<Self> Where Self : _CollectionWrapperType, Index == Base.Index var endIndex: Self.Index The collection's "past the end" position. endIndex is not a valid argument to subscript, and is always reachable from startIndex by zero or more applications of successor(). Declaration var endIndex: Self.Index { get } var startIndex: Self.Index The position of the first element in a non-empty collection. In an empty collection, startIndex == endIndex. Declaration var startIndex: Self.Index { get } subscript(_: Self.Index) Access the element at position. Requires: position is a valid position in self and position != endIndex. Declaration subscript(position: Self.Index) -> Self.Base.Generator.Element { get } func filter(_:) Declaration func filter(@noescape includeElement: (Self.Base.Generator.Element) -> Bool) -> [Self.Base.Generator.Element] func map(_:) Declaration func map<T>(@noescape transform: (Self.Base.Generator.Element) -> T) -> [T] Where Self : _ReverseCollectionType, Base.Index : RandomAccessIndexType var startIndex: ReverseRandomAccessIndex<Self.Base.Index> Declaration var startIndex: ReverseRandomAccessIndex<Self.Base.Index> { get } Where SubSequence : SequenceType, SubSequence.Generator.Element == Generator.Element, SubSequence.SubSequence == SubSequence func dropFirst(_:) Returns a subsequence containing all but the first n elements. Requires: n >= 0 Complexity: O(n) Declaration func dropFirst(n: Int) -> AnySequence<Self.Generator.Element> Declared In SequenceType func dropLast(_:) Returns a subsequence containing all but the last n elements. Requires: self is a finite collection. Requires: n >= 0 Complexity: O(self.count) Declaration func dropLast(n: Int) -> AnySequence<Self.Generator.Element> Declared In SequenceType func prefix(_:) Returns a subsequence, up to maxLength in length, containing the initial elements. If maxLength exceeds self.count, the result contains all the elements of self. Requires: maxLength >= 0 Declaration func prefix(maxLength: Int) -> AnySequence<Self.Generator.Element> Declared In SequenceType Where SubSequence == Self mutating func popFirst() If !self.isEmpty, remove the first element and return it, otherwise return nil. Complexity: O(1) Declaration mutating func popFirst() -> Self.Generator.Element? mutating func popLast() If !self.isEmpty, remove the last element and return it, otherwise return nil. Complexity: O(self.count) Deprecated: it will be removed in Swift 3. Declaration mutating func popLast() -> Self.Generator.Element? mutating func removeFirst() Remove the element at startIndex and return it. Complexity: O(1) Requires: !self.isEmpty. Declaration mutating func removeFirst() -> Self.Generator.Element mutating func removeFirst(_:) Remove the first n elements. Complexity: - O(1) if Index conforms to RandomAccessIndexType - O(n) otherwise Requires: n >= 0 && self.count >= n. Declaration mutating func removeFirst(n: Int) Where SubSequence == Self, Index : BidirectionalIndexType mutating func popLast() If !self.isEmpty, remove the last element and return it, otherwise return nil. Complexity: O(1) Declaration mutating func popLast() -> Self.Generator.Element? mutating func removeLast() Remove an element from the end. Complexity: O(1) Requires: !self.isEmpty Declaration mutating func removeLast() -> Self.Generator.Element mutating func removeLast(_:) Remove the last n elements. Complexity: - O(1) if Index conforms to RandomAccessIndexType - O(n) otherwise Requires: n >= 0 && self.count >= n. Declaration mutating func removeLast(n: Int) Where SubSequence == Slice subscript(_: Range<Self.Index>) Declaration subscript(bounds: Range<Self.Index>) -> Slice<Self> { get }