<div dir="ltr">HI,<div><br></div><div>Does anyone know what is happening here:</div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><p class="">protocol Subscriptable {</p></div><div><p class="">    associatedtype Element</p></div><div><p class="">    associatedtype Index</p></div><div><p class="">    var firstIndex: Index { get }</p></div><div><p class="">    var lastIndex: Index { get }</p></div><div><p class="">    subscript(index: Index) -&gt; Element { get set }</p></div><div><p class="">}</p></div><div><p class=""><br></p></div><div><p class="">struct AllSubscriptable&lt;E, I&gt;: Subscriptable {</p></div><div><p class="">    typealias Element = E</p></div><div><p class="">    typealias Index = I</p></div><div><p class="">    let firstIndexee: () -&gt; I</p></div><div><p class="">    let lastIndexee: () -&gt; I</p></div><div><p class="">    let subscriptee: (index: I) -&gt; E</p></div><div><p class="">    let setSubscriptee: (index: I, element: E) -&gt; Void</p></div><div><p class="">    var firstIndex: I { return firstIndexee() }</p></div><div><p class="">    var lastIndex: I { return lastIndexee() }</p></div><div><p class="">    subscript(index: I) -&gt; E {</p></div><div><p class="">        get { return subscriptee(index: index) }</p></div><div><p class="">        set { setSubscriptee(index: index, element: newValue) }</p></div><div><p class="">    }</p></div><div><p class="">}</p></div><div><p class=""><br></p></div><div><p class="">extension Array {</p></div><div><p class="">    var asScriptable: AllSubscriptable&lt;Element, Int&gt; {</p></div><div><p class="">        return AllSubscriptable(</p></div><div><p class="">            firstIndexee: { return self.startIndex }, // Error: Cannot convert `() -&gt; Int` to expected `() -&gt; _`</p></div><div><p class="">            lastIndexee: { return self.endIndex },<br></p></div><div><p class="">            subscriptee: { return self[$0] },</p></div><div><p class="">            setSubscriptee: { self[$0] = $1 }</p></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><p class="">        )</p></div><div><p class="">    }</p></div><div><p class="">}  </p><p class=""><br></p></div></blockquote>The error, &quot;Cannot convert `() -&gt; Int` to expected `() -&gt; _`&quot;, on the `firstIndexee` closure is very strange since the types are correct and the same as `lastIndexee` which does not have an error. <div><br></div><div>Also if the set subscript in Subscriptable and then all the other set support in AnySubscriptabe and in the extension is removed, then no error.</div><div><br></div><div>Any clues to why?<br><div><br></div><div>-- Howard.<br></div></div></div>