2014-10-22 5 views
8

Im schnellen Buch von Apple befindet sich ein Code-Snippet. Ich tippte es in xcode Spielplatz, aber es zeigt "Operator ist kein bekannter binärer Operator" und "Verwendung von nicht aufgelösten Bezeichner" Fehler. Der Code lautet:Verwendung von ".." mit for-Schleife

Xcode Playground code Nach dem Buch kann ".." Operator mit For-Schleife verwendet werden, um einen Bereich zu machen, der seinen oberen Wert auslässt. Aber es zeigt einen Fehler an. Das Ändern des ".." zu "..." Operators scheint den Fehler zu beheben. Aber warum funktioniert ".." nicht?

+0

Sie benötigen die neueste Version des Buches. Die Version, die Sie haben, ist eine Beta-Version von Swift. – Fogmeister

+0

Danke Fogmeister. –

Antwort

16

Sie haben eine veraltete Version des Swift-Buchs.

Hier gehen Sie. Die aktuelle Version des halbgeschlossenen Bereichs ist 0..<3 nicht 0..3https://developer.apple.com/library/ios/documentation/swift/conceptual/Swift_Programming_Language/BasicOperators.html

+0

Noch eine Sache, werden diese Arten von Problemen mehr erscheinen? Werden sie die Syntax von swift ständig ändern, wenn sie sich danach fühlen? –

+0

Nun, in der neuesten Version (1.1) haben sie die Möglichkeit hinzugefügt, optionale Returns von init zu haben. Das war ein Bug und benötigte Codeänderungen, um es zu beheben. Auf deine Frage wahrscheinlich, ja. Swift ist immer noch eine sehr junge Sprache. Die Änderungen zwischen Ihrem Code und der aktuellen Version wurden vor der Version 1.0 vorgenommen und wurden daher erwartet. Es wird von nun an weniger Änderungen geben, aber das soll nicht heißen, dass sich nichts ändern wird. – Fogmeister

+0

Ich habe eine alte Version von Swift Ibook gelesen und sogar Xcode war 6.0.1. Ich habe beide aktualisiert. Danke für die Info und schnelle Antwort Fogmeister. –

1

Die Dinge sind jetzt anders in Swift 2. Hier ist, wie es in Xcode 7 jetzt tun (die ursprüngliche Frage zeigt sehr in einer Google-Suche nach diesem speziellen Problem) :

for i in 1 ..< Process.argc { 
    let index = Int(i); 

    if let arg = String.fromCString(Process.unsafeArgv[index]) { 
     switch arg { 
     case "-whatever": 
      // do something 

     default: 
      break 
     } 
    } 
} 
+0

Ah, Entschuldigung. Ich bin ursprünglich wegen des Problems ".." hierher gekommen, aber ich habe auch versucht, Befehlszeilenargumente zu verarbeiten. Meine veröffentlichte Lösung enthält offensichtlich mehr als nötig, aber ich denke, es kann nicht schaden. –