2016-09-07 3 views
1

Ich verwende eine Schleife, um das Originalbild für Registerkartenelemente so festzulegen, dass der nicht ausgewählte Status nicht grau ist (meine ursprünglichen Symbole sind weiß). Allerdings sieht es aus wie die jüngste Xcode 8 Update den Code brach:Erwarteter Sequenzausdruck swift 3

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

}

ich die folgenden Fehler in der ersten Zeile erhalten: Expected 'in' after for-each pattern, Expected Sequence expression for for-each loop und Expected pattern.

Kann mir bitte jemand helfen, diese Lösung zu reparieren? Es hat bis heute gut funktioniert.

Danke !!

+1

Wie wäre es, wenn Sie die Klammern löschen? – matt

+0

Ihr Code hat einige sehr seltsame Namen. Sie rufen den Index 'items' auf und verwenden diesen, um ein Element zu holen, rufen aber' index' auf. Warum listen Sie nicht einfach die Items als 'für Item in Items {item.image = ...} auf? – vikingosegundo

+0

@vikingosegundo Lass uns einfach den Syntaxfehler überwinden, bevor wir versuchen, seinen Stil zu verbessern! – matt

Antwort

8

for x in y ist ein tatsächlicher Ausdruck in Swift. Sie können es nicht mit Klammern trennen, for (x in y) - das trennt die for von der in und bewirkt, dass der Ausdruck für den Compiler wie Unsinn scheint.

Also, löschen Sie die Klammern und alles wird gut.

2

Sie haben einige Probleme, wie Sie Ihre Schleife erstellen, und einige sehr unsichere erzwungene Unwrapping. Versuchen Sie folgendes:

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

Oder noch sauberer, wie folgt aus:

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

In Swift, anders als in Objective-C gibt es keine Klammern in dieser Struktur beteiligt. Entfernen Sie die Klammern, um den Syntaxfehler zu beheben.

Allerdings gibt es hier andere Stil- und Sicherheitsprobleme als den Syntaxfehler: siehe piccianos Antwort für eine viel sauberere und sicherere Methode, die Schleife neu zu schreiben.

+1

Nein nein nein, @ andyvn22, das ist meine Antwort. – matt

+0

"Verwenden Sie Ihre Downvotes immer dann, wenn Sie auf einen unerhört schlampigen, mühelose Post stoßen oder eine Antwort, die eindeutig und vielleicht gefährlich falsch ist." – andyvn22