web-dev-qa-db-fra.com

`po` donne` erreur: <EXPR>: 1: 1: erreur: utilisation d'identificateur non résolu`

J'ai ce problème avec po dans la console où essayer de générer une fonction fonctionne en soi, mais la sortie d'une variable ou d'une constante ne fonctionne pas.

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

Comme vous pouvez le voir ici, bien que vous pensiez que var/let contient le contenu de bar.boy(), Swift ne parvient pas à le trouver ...

50
StuFF mc

Il s’est donc avéré qu’il y avait probablement un bogue dans le passé qui, lorsque vous ajoutiez un fichier Swift, ajoutait/demandait un en-tête Bridging, mais n’ajoutait pas cette ligne à votre projet.

Swift_OPTIMIZATION_LEVEL = "-Onone";

ce qui signifie que vous resteriez dans cet état

Swift_OPTIMIZATION_LEVEL fastest

résultant en error: <EXPR>:1:1: error: use of unresolved identifier!

Je n’ai pu le découvrir que parce que j’ai déplacé des fichiers dans mon projet et que j’ai ajouté des fichiers ObjC au projet, il m’a demandé un en-tête Bridging (bien que j’en ai déjà un!) Et j’ai heureusement ajouté ce Swift_OPTIMIZATION_LEVEL. On pourrait considérer qu’il s’agit d’un bogue, alors que la valeur par défaut est fastest, mais j’imagine qu’il s’agissait là seulement d’un bogue qui a été corrigé maintenant.

Malgré tout, j’ai corrigé le problème en inversant le problème si none était ajouté dans la version de développement. Je ne peux pas tester ceci pour le moment car pour cela, je n'avais qu'une version Debug. Je vais laisser cela comme un exercice :) pour les ingénieurs d'Apple.

48
StuFF mc

Je mets Swift Complier à "-O"

Swift_OPTIMIZATION_LEVEL = "-O";

et le remettre à "-Onone".

Swift_OPTIMIZATION_LEVEL = "-Onone";

Alors ça marche.

7
User9527

Fixé après le réglage:

Optimization Level = None[-Onone] sous Swift Compiler - Génération de code

Notez que la définition de Optimization Level sous Apple LLVM 8.0 - Génération de code n'a aucun effet.

4
Desmond DAI

Je parie que ce bogue est dû au fait que foo a été optimisé lors de la compilation et que ce symbole n'existe plus dans le code compilé (même s'il ne devrait pas en déboguer et qu'il s'agit toujours d'un bogue LLDB)

Probablement si vous ajoutez une utilisation de foo dans les lignes suivantes (même une impression), son symbole sera conservé dans l’IR et vous pourrez po foo

(Je conviens que c'est toujours un bug mais au moins si cela fonctionne, vous aurez une solution de contournement et un sens de l'explication)

3
AliSoftware

J'ai rencontré un problème similaire mais j'avais déjà la configuration correcte, toutes les optimisations étant définies sur None. Cependant, je n'ai toujours pas eu de valeur.

Après des recherches plus approfondies, j'ai découvert que le problème provenait de l'impossibilité pour Xcode de résoudre les types:

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

Cela m'a amené à cette question: xcode 8 Le débogueur 'Impossible de résoudre le type' où le problème est décrit et où l'en-tête de pontage semble poser problème.

Mon projet n'ayant pas d'en-tête de pontage, j'ai étudié une fois de plus les paramètres de construction et trouvé ce paramètre.

setting[1]

Cela a été initialement défini sur YES. Après avoir changé les symboles NO, ils fonctionnent à nouveau.

Swift_INSTALL_OBJC_HEADER = NO

2
snod

Si votre projet utilise Swift, la configuration projet/cible comporte deux paramètres distincts "Niveau d'optimisation". Ce n'est pas seulement "Swift_OPTIMIZATION_LEVEL". Vérifiez ce lien: https://stackoverflow.com/a/32984193/2060180

Je vais le laisser ici au cas où cela serait utile à quelqu'un.

0
Ricardo Anjos