Преобразование в Swift 2 Ошибка NSIndexPath

Проблема: при преобразовании в Swift 2 я получаю следующую ошибку: «Значение необязательного типа [NSIndexPath]? не развернуто, вы хотели использовать «!» или «?»». Проблема в том, что если я использую '?', выдается ошибка, говорящая, что я должен использовать '!', а если я использую '!' выдает ошибку, говоря, что я должен использовать '?'. Таким образом, он создает этот неприятный маленький цикл ошибок, который кажется неисправимым.

Код:

override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool {

    if identifier == Constants.SegueIdentifier {
        if let selectedRowIndex = collectionView?.indexPathsForSelectedItems().last as? NSIndexPath {
            if let cell = collectionView?.cellForItemAtIndexPath(selectedRowIndex) {
                //We check if the selected Card is the one in the middle to open the chat. If it's not, we scroll to the side card selected.
                if cell.frame.size.height > cell.bounds.size.height {
                    return true
                } else {
                    collectionView?.scrollToItemAtIndexPath(selectedRowIndex, atScrollPosition: UICollectionViewScrollPosition.CenteredHorizontally, animated: true)
                    return false
                }
            }
        }
    }

    return true
}

Я не смог придумать никаких обходных путей, так как кажется, что мне нужно как-то развернуть его. Кто-нибудь видел эту проблему?


person Joseph    schedule 12.01.2016    source источник


Ответы (2)


indexPathsForSelectedItems() возвращает [NSIndexPath]? (необязательно), вам нужно добавить еще один вопросительный знак для необязательной цепочки и удалить as? NSIndexPath, поскольку компилятор знает развернутый тип.

if let selectedRowIndex = collectionView?.indexPathsForSelectedItems()?.last {
person vadian    schedule 12.01.2016
comment
Когда я пытаюсь, если пусть selectedRowIndex = collectionView?.indexPathsForSelectedItems()?.last as? NSIndexPath { Я получаю следующую ошибку: Downcast from 'NSIndexPath?' to 'NSIndexPath' разворачивает только опции; Вы хотели использовать '!'? - person Joseph; 12.01.2016

Решение:

if let selectedRowIndex = collectionView!.indexPathsForSelectedItems()!.last! as? NSIndexPath

Меня беспокоит только безопасность типов, но в моем проекте она работает так, как сейчас.

person Joseph    schedule 12.01.2016
comment
Ваше решение небезопасно. Попробуйте синтаксис в моем обновленном ответе - person vadian; 12.01.2016