Search code examples
swiftmultidimensional-arraynsarray

Ambiguous use of a subscript when accessing a 2-dimensional array bridged from Obj-C


This code which ran perfectly in Xcode 7.0 now complains with a error : Ambiguous use of a subscript in Xcode 7.3.1 on the second line.

    let ar = sender.draggingPasteboard().propertyListForType("ABLinkedPeopleUIDsPboardType") as! NSArray?

    let uniqueID = ar![0][0] as! String

I understand that the NSArray on its own is now considered bad practice, but what do I need to do to get this to compile and run?


Solution

  • NSArray is a single-dimensioned array, but you're trying to use it as a two-dimensional array. I can't see how this would ever compile.

    You need to translate into Swift types immediately so you can continue programming in Swift, not go adrift in a sea of force-unwrapped Optionals.

    How about:

    if let ar = sender.draggingPasteboard().propertyListForType("ABLinkedPeopleUIDsPboardType") as? [[String]] { 
        // I'm assuming you're expecting to get back a two-dimensional array of Strings, or in the Obj-C realm, an NSArray of NSArrays of NSStrings
        let uniqueID = ar[0][0]
    }
    else {
        print("Property List for ABLinkedetc. is not a 2D String Array!")
    }
    

    Hayden's link is the correct general discussion but if you're new to bridging Obj C to Swift it may be difficult to apply in your particular case.