[swift-users] Element vs. Iterator.Element

Slava Pestov spestov at apple.com
Wed Nov 2 16:23:02 CDT 2016


I don’t remember the details, but IIRC ‘Iterator’ is an inferred associated type on Array, so it cannot appear in the ‘where’ clause of an extension. This is a known limitation of the name lookup code — presently it cannot recur into associated type inference due to circularity. We plan on addressing this with the ‘iterative declaration checker’, but that is some ways off.

Slava

> On Oct 31, 2016, at 5:28 AM, Toni Suter via swift-users <swift-users at swift.org> wrote:
> 
> Hi,
> 
> This extension on Array works as expected:
> 
> extension Array where Element: CustomStringConvertible {
>     func f(_ x: Element) -> String {
>         return x.description
>     }
> }
> 
> But when I use Iterator.Element instead, I get an error message (error: value of type 'Element' has no member 'description'):
> 
> extension Array where Iterator.Element: CustomStringConvertible {
>     func f(_ x: Iterator.Element) -> String {
>         return x.description
>     }
> }
> 
> I assume this is a type checker bug, but before I report it, I wanted to make sure that that’s really the case. Or is there a difference between Element and
> Iterator.Element?
> 
> Thanks and best regards,
> Toni
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161102/ea75f1f0/attachment.html>


More information about the swift-users mailing list