2016-09-07 2 views
1

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

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

Как насчет удаления скобок? – matt

+0

ваш код имеет очень странное имя. Вы вызываете индекс 'items' и используете это для извлечения элемента, но вы вызываете' index'. почему бы просто не перечислять элементы как 'для элемента в items {item.image = ...}'? – vikingosegundo

+0

@vikingosegundo, давайте просто заставим его пройти синтаксическую ошибку, прежде чем мы попытаемся улучшить его стиль! – matt

ответ

8

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

Итак, удалите круглые скобки, и все будет хорошо.

2

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

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) 
    } 
} 
0

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

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

+1

Нет, нет, @ andyvn22, это _my_ ответ. – matt

+0

«Используйте свои downvotes всякий раз, когда вы сталкиваетесь с вопиющим, неряшливым, не затраченным на усилия сообщением или ответ, который явно и, возможно, опасно неверен». – andyvn22

Смежные вопросы