[swift-users] Strange type error
zhigang
zhigang1992 at gmail.com
Fri Mar 25 01:50:29 CDT 2016
It might have something to do with
`setSubscriptee`
with seems from the implementation is a `mutating` operation.
If you comment it out, or just give it a empty callback, it will pass
compile.
Kyle
On Tue, Mar 22, 2016 at 6:23 AM Howard Lovatt via swift-users <
swift-users at swift.org> wrote:
> Hi,
>
> I don't understand your comment, can you explain some more please?
>
> Thanks,
>
> -- Howard.
>
>
> On Monday, 21 March 2016, zh ao <owenzx at gmail.com> wrote:
>
>> You protocol is not defined properly.
>>
>> On Mon, Mar 21, 2016 at 7:08 AM, Howard Lovatt via swift-users <
>> swift-users at swift.org> wrote:
>>
>>> HI,
>>>
>>> Does anyone know what is happening here:
>>>
>>> protocol Subscriptable {
>>>
>>> associatedtype Element
>>>
>>> associatedtype Index
>>>
>>> var firstIndex: Index { get }
>>>
>>> var lastIndex: Index { get }
>>>
>>> subscript(index: Index) -> Element { get set }
>>>
>>> }
>>>
>>>
>>> struct AllSubscriptable<E, I>: Subscriptable {
>>>
>>> typealias Element = E
>>>
>>> typealias Index = I
>>>
>>> let firstIndexee: () -> I
>>>
>>> let lastIndexee: () -> I
>>>
>>> let subscriptee: (index: I) -> E
>>>
>>> let setSubscriptee: (index: I, element: E) -> Void
>>>
>>> var firstIndex: I { return firstIndexee() }
>>>
>>> var lastIndex: I { return lastIndexee() }
>>>
>>> subscript(index: I) -> E {
>>>
>>> get { return subscriptee(index: index) }
>>>
>>> set { setSubscriptee(index: index, element: newValue) }
>>>
>>> }
>>>
>>> }
>>>
>>>
>>> extension Array {
>>>
>>> var asScriptable: AllSubscriptable<Element, Int> {
>>>
>>> return AllSubscriptable(
>>>
>>> firstIndexee: { return self.startIndex }, // Error: Cannot
>>> convert `() -> Int` to expected `() -> _`
>>>
>>> lastIndexee: { return self.endIndex },
>>>
>>> subscriptee: { return self[$0] },
>>>
>>> setSubscriptee: { self[$0] = $1 }
>>>
>>> )
>>>
>>> }
>>>
>>> }
>>>
>>>
>>> The error, "Cannot convert `() -> Int` to expected `() -> _`", on the
>>> `firstIndexee` closure is very strange since the types are correct and the
>>> same as `lastIndexee` which does not have an error.
>>>
>>> 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.
>>>
>>> Any clues to why?
>>>
>>> -- Howard.
>>>
>>> _______________________________________________
>>> swift-users mailing list
>>> swift-users at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-users
>>>
>>>
>>
>
> --
> -- Howard.
> _______________________________________________
> 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/20160325/e87061e6/attachment.html>
More information about the swift-users
mailing list