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.
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 ...
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
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.
Ich setze Swift Complier auf "-O"
Swift_OPTIMIZATION_LEVEL = "-O";
und setzen Sie es wieder auf "-Onone".
Swift_OPTIMIZATION_LEVEL = "-Onone";
Dann klappt es.
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
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.)
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
Dies wurde ursprünglich auf YES
gesetzt. Nach dem Ändern in NO
funktionieren die Symbole wieder.
Swift_INSTALL_OBJC_HEADER = NO
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.