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.
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 ...
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
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.
Je mets Swift Complier à "-O"
Swift_OPTIMIZATION_LEVEL = "-O";
et le remettre à "-Onone".
Swift_OPTIMIZATION_LEVEL = "-Onone";
Alors ça marche.
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.
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)
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.
Cela a été initialement défini sur YES
. Après avoir changé les symboles NO
, ils fonctionnent à nouveau.
Swift_INSTALL_OBJC_HEADER = NO
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.