This function seems simple enough:

    func foo(a: [Int], n: Int) {
        var x : [Int] = a[0..<n]
    }

But it doesn’t compile.

    error: ambiguous subscript with base type '[Int]' and index type 
'Range<Int>'
    var x : [Int] = a[0..<n]
        ~^~~~~~~
        Swift.Array:100:12: note: found this candidate
    public subscript (subRange: Range<Int>) -> ArraySlice<Element> { get set }
    ^
    Swift.MutableCollectionType:3:12: note: found this candidate
    public subscript (bounds: Range<Self.Index>) -> MutableSlice<Self> { get 
set }
    ^
    Swift.CollectionType:2:12: note: found this candidate
    public subscript (bounds: Range<Self.Index>) -> Slice<Self> { get }
    ^

The oddity is that if I change the assignment to this

    var y : [Int] = Array(a[0..<n])

then the compiler is happy.

Shouldn’t it be able to do any necessary type inference from the fact that the 
expression is in a context where an array is required?

        Neil Faiman
_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to