Karl
(👑🦆)
1
For some reason, IndexingIterator's initializer, despite being public, contains underscores which prevent it from appearing in code-completion, and seem to suggest that it shouldn't be used.
I'd like to pitch removing those underscores. I can't think of a reason why we'd want to prevent users from creating an IndexingIterator starting at a particular Index.
It's essentially possible to do this already by creating an iterator over a slice, but doing so changes the iterator's type, making it an IndexingIterator<Slice<MyCollection>> rather than an IndexingIterator<MyCollection>.
xwu
(Xiaodi Wu)
2
These entry points are public only for standard library testing purposes.
As I understand it, there’s no intention to make it possible for the end user to initialize an IndexingIterator at all. Instead, users obtain an instance by calling makeIterator() on a collection type that doesn’t override the default implementation. But there shouldn’t ever be a need to support mixing-and-matching the default iterator with a collection type that provides a custom iterator.
Why’s the concrete iterator type a problem?
Karl
(👑🦆)
3
Hm? Not sure what you mean here.
Why wouldn't it be a problem? MyCollection's iterator type is IndexingIterator<MyCollection>, not IndexingIterator<Slice<MyCollection>>, so it isn't able to return an offset iterator as an instance of its own iterator.
If this function isn't supported, it means that we require users to write their own iterators - even when the default would have been fine - just to support this obvious functionality. It isn't very difficult, but it is very annoying to have to reimplement basic types like this.
xwu
(Xiaodi Wu)
4
I’m not sure I understand. There is no publicly documented API to instantiate IndexingIterator at all, unless I’m missing something. Can you describe the use case you have in mind?
1 Like
xwu
(Xiaodi Wu)
5
Where a type defines its own custom iterator, it is not the intention of Swift to support the end user instantiating IndexingIterator(elements: valueOfMyCollectionTypeWithCustomIterator). They should always use valueOfMyCollectionTypeWithCustomIterator.makeIterator().