2016-09-20 3 views
0

Ich habe ein sehr einfaches Projekt. Es ist das Command Line Tool, das mit Xcode 8.0 auf Swift 3.0 geschrieben wurde. Dieses Programm ist:Swift 3.0 Verwendung von nicht aufgelösten Bezeichner

import Foundation 

func aaa() { 
    print(a) 
} 

let a = "a" 

aaa() 

Das funktionierte sehr gut und Druck "a" in der Konsole, sondern läßt dieses Programm tut komplexes:

import Foundation 

func aaa() { 
    print(a) 
    print(b) 
} 

let a = "a" 
let b = "b" 

aaa() 

Und Linie

print(b) 

markiert mit Fehler

Use of unresolved identifier 'b'

können wir noch einfacher machen:

import Foundation 

func aaa() { 
    print(a) 
} 

aaa() 

let a = "a" 

Und wieder Linie

print(a) 

ist

mit Fehler markiert

Use of unresolved identifier 'a'

Ich bin nicht Neuling und ich undertand, dass ich diesen Fehler leicht beheben wie alle Variablen am Anfang des Programms zu setzen. Die Frage ist: Warum passiert es? Ich dachte jede Datei mit der Erweiterung .swift, es ist eine Klasse und ich kann Variablen und Funktionen setzen, Funktionen in beliebiger Reihenfolge aufrufen (alle Variablen und Konstanten wären global) ... Und eine letzte Sache, ich habe keine Fähigkeit um dies auf Swift 2.2 zu testen, aber ich kann mich nicht erinnern, dass ich diesen Bug vorher gesehen habe, kann es also ein Fehler des Swift 3.0 Compilers sein? Vielen Dank für jede Antwort!

Antwort

0

Es scheint ein Swift-Compiler-Fehler zu sein:

Wenn ich es mit anderen Variablen getestet:

enter image description here

Es springt immer erste Ausgabe und entspricht in der zweiten Variable, auf dem ersten.

Im Allgemeinen, wenn auf Zugriff auf eine Variable will, ist, dass in einer Funktion und wollte jede Aktion mit solchen Variablen zu tun, muss es dort deklariert werden.

Ich würde diese Konvention überall folgen.

+0

Vielen Dank für die Antwort. Wie denken Sie, sollten wir dies Apple melden? – Alex

+0

Ja, warum nicht? Wenn Sie Glück haben und wenn Sie Ihnen mit anderen Erklärungen antworten, vergessen Sie nicht, es hier zu teilen :) – pedrouan

+0

Ich werde, aber ich brauche etwas Zeit dafür ... – Alex

Verwandte Themen