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@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to