Почему XCode не распознает indexOfObjectIdenticalTo в быстром массиве? - PullRequest
0 голосов
/ 25 марта 2020

Я пытаюсь перевести некоторый код 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:

Значение типа '[NSTextContainer]' не имеет члена 'indexOfObjectIdenticalTo'

Не понимаю этого , Я искал документы для Swift, и NSArray имеет indexOfObjectIdenticalTo, но он не отображается в автозаполнении Xcode и выдает мне эту ошибку. Я новичок в Swift, так интересно, что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 25 марта 2020

В 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: { $0 === textContainer })
1 голос
/ 25 марта 2020

[NSTextContainer] не является экземпляром NSArray. Вы можете попытаться привести ваш массив к NSArray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...