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.

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to