[swift-users] adopting RandomAccessCollection protocol

Ole Begemann ole at oleb.net
Sun Mar 12 11:48:25 CDT 2017


On 12/03/2017 16:58, Don Giovanni via swift-users wrote:
> I'm trying to adopt the RandomAccessCollection protocol from a class. I
> deliberately leave out the func index(before:) function because there
> is already a default implementation of that function in
> RandomAccessCollection. I do understand that that function's
> implementation is required because of BiDirectionalCollection from which
> RandomAccessCollection inherits.
>
> My question is why would the compiler complain that func index(before:)
> implementation is required when there is already a default
> implementation in RandomAccessCollection that i can use?

The default implementation for index(before:) is in an extension with 
these constraints:

extension RandomAccessCollection where Index : Strideable,
     Index.Stride == IndexDistance,
     Indices == CountableRange<Index> {
     ...
     public func index(before i: Self.Index) -> Self.Index
     ...
}

Your collection type doesn't satify these constraints because 
Container2.Indices is DefaultRandomAccessIndices. If you replace the 
typealias with:

     typealias Indices = CountableRange<Int>

it will work.



More information about the swift-users mailing list