it-swarm.com.de

"po" gibt "error: <EXPR>: 1: 1: error: Verwendung eines nicht aufgelösten Bezeichners"

Ich habe dieses Problem mit po in der Konsole, wo der Versuch, eine Funktion auszugeben, in sich funktioniert, die Ausgabe einer Variablen oder Konstante jedoch nicht.

first result is for <code>po bar.boy()</code>, second says <code>unresolved</code>

Wie Sie hier sehen können, obwohl Sie denken, dass var/let den Inhalt von bar.boy() enthält, kann Swift es irgendwie nicht finden ...

50
StuFF mc

Es stellte sich also heraus, dass es in der Vergangenheit wahrscheinlich einen Fehler gab, der beim Hinzufügen einer Swift-Datei einen Bridging-Header hinzufügte/fragt, diese Zeile jedoch nicht zu Ihrem Projekt hinzufügen würde

Swift_OPTIMIZATION_LEVEL = "-Onone";

was bedeutet, dass Sie in diesem Zustand bleiben würden

Swift_OPTIMIZATION_LEVEL fastest

was error: <EXPR>:1:1: error: use of unresolved identifier ergibt!

Ich konnte das nur herausfinden, weil ich Dateien in meinem Projekt verschoben habe. Als ich dem Projekt ObjC-Dateien hinzugefügt habe, wurde ich nach einem Bridging-Header gefragt (obwohl ich bereits einen hatte!) Und glücklicherweise Swift_OPTIMIZATION_LEVEL hinzugefügt. Man könnte in Betracht ziehen, dass dies ein Fehler ist, der den Standardwert fastest berücksichtigt, aber ich denke, dies war nur ein Fehler in der Vergangenheit und wurde jetzt behoben.

Ich habe es jetzt behoben, es könnte ein Fehler in umgekehrter Richtung sein, wenn er none im Release-Build hinzufügt. Ich kann das jetzt nicht testen, denn zum Testen hatte ich nur einen Debug-Build. Ich lasse das als Übung :) für die Ingenieure von Apple.

48
StuFF mc

Ich setze Swift Complier auf "-O"

Swift_OPTIMIZATION_LEVEL = "-O";

und setzen Sie es wieder auf "-Onone".

Swift_OPTIMIZATION_LEVEL = "-Onone";

Dann klappt es.

7
User9527

Festgelegt nach Einstellung:

Optimization Level = None[-Onone] unter Swift Compiler - Codegenerierung

Beachten Sie, dass die Einstellung Optimization Level unter Apple LLVM 8.0 - Code Generation keine Auswirkungen hat

4
Desmond DAI

Ich wette, dass der Fehler auf die Tatsache zurückzuführen ist, dass foo während des Kompilierens optimiert wurde und das Symbol im kompilierten Code nicht mehr vorhanden ist (auch wenn es nicht in debug enthalten sollte und es immer noch ein LLDB-Fehler ist)

Wenn Sie in den nächsten Zeilen etwas von foo hinzufügen (sogar eine println), wird das Symbol hoffentlich in der IR gespeichert und Sie können po foo

(Ich stimme zu, dass dies immer noch ein Fehler ist, aber wenn es funktioniert, haben Sie eine Problemumgehung und ein gewisses Verständnis.)

3
AliSoftware

Ich bin auf ein ähnliches Problem gestoßen, hatte aber bereits die richtige Konfiguration. Alle Optimierungen wurden auf None gesetzt. Ich habe jedoch noch keine Werte erhalten.

Nach einigem Graben fand ich heraus, dass das Problem von Xcode herrührte, da es nicht in der Lage war, die Typen aufzulösen:

(lldb) frame variable self
<could not resolve type>

Das brachte mich zu dieser Frage: xcode 8 Debugger 'Typ konnte nicht aufgelöst werden' wo das Problem beschrieben wird und der Überbrückungsheader Probleme zu verursachen scheint.

Da mein Projekt keine Überbrückungsheader hatte, studierte ich die Build-Einstellungen erneut und fand diese Einstellung

setting[1]

Dies wurde ursprünglich auf YES gesetzt. Nach dem Ändern in NO funktionieren die Symbole wieder.

Swift_INSTALL_OBJC_HEADER = NO

2
snod

Wenn Ihr Projekt Swift verwendet, gibt es in der Projekt-/Zielkonfiguration zwei separate Einstellungen für "Optimierungsebene". Es ist nicht nur "Swift_OPTIMIZATION_LEVEL". Überprüfen Sie diesen Link: https://stackoverflow.com/a/32984193/2060180

Ich lass es hier, falls es jemandem nützlich ist.

0
Ricardo Anjos