<div dir="ltr">Consider:<br><br>extension CollectionType where Generator.Element : Equatable {<br>    <br>    /// Returns a subsequence, until a element equal to `value`, containing the<br>    /// initial elements.<br>    ///<br>    /// If none of elements equal to `value`, the result contains all<br>    /// the elements of `self`.<br>    ///<br>    /// - Complexity: O(`self.count`)<br>    @warn_unused_result<br>    public func prefixUntil(element: Self.Generator.Element) -&gt; Self.SubSequence {<br>        return self.prefixUpTo(self.indexOf(element) ?? self.endIndex)<br>    }<br>}<br><br><br>extension CollectionType {<br>    <br>    /// Returns a subsequence, until a element satisfying the predicate, containing the<br>    /// initial elements.<br>    ///<br>    /// If none of elements satisfying the predicate, the result contains all<br>    /// the elements of `self`.<br>    ///<br>    /// - Complexity: O(`self.count`)<br>    @warn_unused_result<br>    public func prefixUntil(@noescape predicate: (Self.Generator.Element) throws -&gt; Bool) rethrows -&gt; Self.SubSequence {<br>        return self.prefixUpTo(try self.indexOf(predicate) ?? self.endIndex)<br>    }<br>}<br><br><br>extension CollectionType where Generator.Element : Equatable, Index : BidirectionalIndexType {<br>    /// Returns a subsequence, until a element equal to `value`, containing the<br>    /// final elements of `self`.<br>    ///<br>    /// If none of elements equal to `value`, the result contains all<br>    /// the elements of `self`.<br>    ///<br>    /// - Complexity: O(`self.count`)<br>    @warn_unused_result<br>    public func suffixUntil(element: Self.Generator.Element) -&gt; Self.SubSequence {<br>        return self.suffixFrom(self.reverse().indexOf(element)?.base ?? self.startIndex)<br>    }<br>}<br><br><br>extension CollectionType where Index : BidirectionalIndexType {<br>    /// Returns a subsequence, until a element satisfying the predicate, containing the<br>    /// final elements of `self`.<br>    ///<br>    /// If none of elements satisfying the predicate, the result contains all<br>    /// the elements of `self`.<br>    ///<br>    /// - Complexity: O(`self.count`)<br>    @warn_unused_result<br>    public func suffixUntil(@noescape predicate: (Self.Generator.Element) throws -&gt; Bool) rethrows -&gt; Self.SubSequence {<br>        return self.suffixFrom(try self.reverse().indexOf(predicate)?.base ?? self.startIndex)<br>    }<br>}<br><br><div>and here are my <span style="color:rgb(0,0,0);white-space:pre-wrap">utilities</span>: <a href="https://github.com/SusanDoggie/Doggie/blob/master/Doggie/Foundation.swift">https://github.com/SusanDoggie/Doggie/blob/master/Doggie/Foundation.swift</a><br></div></div>