访问从 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,则可能很难在您的特定情况下应用。
这段 运行 在 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,则可能很难在您的特定情况下应用。