访问从 Obj-C 桥接的二维数组时模糊使用下标

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

这段 运行 在 Xcode 7.0 中完美的代码现在抱怨错误:第二行 Xcode 7.3.1 中的下标使用不明确。

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

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

我知道 NSArray 本身现在被认为是不好的做法,但是我需要做什么才能编译它 运行?

NSArray 是一维数组,但您正试图将其用作二维数组。我看不出这将如何编译。

您需要立即转换为 Swift 类型,以便您可以在 Swift 中继续编程,而不是在强制展开的 Optional 的海洋中随波逐流。

怎么样:

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 的 link 是正确的一般性讨论,但如果您不熟悉将 Obj C 桥接到 Swift,则可能很难在您的特定情况下应用。