为什么 Xcode 无法识别 swift 数组中的 indexOfObjectIdenticalTo?

Why is Xcode not recognizing indexOfObjectIdenticalTo in swift array?

我正在尝试翻译一些 Objective-C 代码:

NSArray *containers = [layoutManager textContainers];
NSUInteger lastUsedContainerIndex = [containers indexOfObjectIdenticalTo:textContainer];

到Swift:

let textContainers = layoutManager.textContainers
let lastUsedContainerIndex = textContainers.indexOfObjectIdentical(to: textContainers)

其中layoutManager是NSLayoutManager类型。我在 Swift 代码的最后一行收到此错误:

Value of type '[NSTextContainer]' has no member 'indexOfObjectIdenticalTo'

不理解这个。我在文档中搜索了 Swift 并且 NSArray 有 indexOfObjectIdenticalTo 但它没有出现在 Xcode 的自动完成中并且给我这个错误。我是 Swift 的新手,所以想知道我在这里错过了什么?

[NSTextContainer] 不是 NSArray 的实例。您可以尝试将数组转换为 NSArray.

在 Swift 中,它被导入为 Foundation.NSArray.indexOfObjectIdentical(to:)。这在 Swift.Array 上不可用,因此您首先必须将 Array 桥接到 NSArray,因此拼写为:

let textContainers = layoutManager.textContainers
let lastUsedContainerIndex = NSArray(textContainers).indexOfObjectIdentical(to: textContainer)

但在 Swift 中,这将更常规地写为:

let textContainers = layoutManager.textContainers
let lastUsedContainerIndex = textContainers.firstIndex(where: { [=11=] === textContainer })