Я использую цикл, чтобы установить исходное изображение для элементов панели вкладок, чтобы невыделенное состояние не было серым (мои исходные значки белые). Однако похоже, что недавнее обновление Xcode 8 сломало код:

for (items in 0  ..< tabBar.items!.count ){
    let tabItemIndex = tabBar.items![items]
    tabItemIndex.image = tabItemIndex.image!.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
}

}

В первой строке появляются следующие ошибки: Expected 'in' after for-each pattern, Expected Sequence expression for for-each loop и Expected pattern.

Может ли кто-нибудь помочь мне исправить это решение? Он отлично работал до сегодняшнего дня.

Благодарность!!

1
winston 8 Сен 2016 в 02:12

3 ответа

Лучший ответ

for x in y - это фактическое выражение в Swift. Вы не можете разбить его круглыми скобками, for (x in y) - это отделяет for от in и заставляет выражение казаться компилятору бессмысленным.

Итак, снимаем скобки, и все будет хорошо.

9
matt 7 Сен 2016 в 23:28

В Swift, в отличие от Objective-C, в этой структуре нет скобок. Удалите круглые скобки, чтобы исправить синтаксическую ошибку.

Однако здесь есть проблемы со стилем и безопасностью, кроме синтаксической ошибки: см. Ответ Пиччано, чтобы узнать гораздо более чистый и безопасный способ переписать цикл.

0
andyvn22 7 Сен 2016 в 23:31

У вас есть некоторые проблемы с тем, как вы создаете цикл, и некоторые очень небезопасные принудительные развертывания. Попробуй это:

if let items = tabBar.items {
    for tabBarItem in items {
        if let image = tabBarItem.image {
            tabBarItem.image = image.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
        }
    }
}

Или даже чище, например:

tabBar.items?.forEach { tabBarItem in
    if let image = tabBarItem.image {
        tabBarItem.image = image.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
    }
}
2
picciano 7 Сен 2016 в 23:25