`po` дает` error: <EXPR>: 1:1: ошибка: использование неразрешенного идентификатора`
У меня есть эта проблема с po
в консоли, где попытка вывода функции работает сама по себе, но вывод переменной или константы не выполняется.
![first result is for <code>po bar.boy()</code>, second says <code>unresolved</code>]()
Как вы можете видеть здесь, хотя вы думаете, что var/let содержит содержимое bar.boy()
, Swift как-то не может его найти...
Ответы
Ответ 1
Итак, оказалось, что в прошлом, вероятно, была ошибка: когда вы добавляли файл Swift, он добавлял/спрашивал заголовок Bridging, но не добавлял бы эту строку в ваш проект
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
что означает, что вы останетесь в этом состоянии
![SWIFT_OPTIMIZATION_LEVEL fastest]()
приводит к error: <EXPR>:1:1: error: use of unresolved identifier
!
Я мог только найти это, потому что я перемещал файлы в своем проекте, и когда я добавил файлы ObjC в проект, он спросил меня о заголовке Bridging (хотя у меня его уже было!) и к счастью добавил, что SWIFT_OPTIMIZATION_LEVEL
. Можно было бы подумать, что это ошибка, чтобы рассмотреть значение по умолчанию fastest
, но опять же я предполагаю, что это было только ошибкой в прошлом и теперь исправлено.
Тем не менее, я исправил, что это может быть ошибка, наоборот, если она добавляет none
в сборку релиза. Я не могу проверить это прямо сейчас, потому что для тестирования я имел только конструкцию Debug
. Я оставлю это как упражнение:) для Apple Engineers.
Ответ 2
Я установил Swift Complier на "-O"
SWIFT_OPTIMIZATION_LEVEL = "-O";
и верните его в "-Onone".
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
Затем он работает.
Ответ 3
Я уверен, что ошибка связана с тем, что во время компиляции был оптимизирован foo
, и этот символ больше не существует в скомпилированном коде (даже если он не должен иметь отладки и все еще ошибка LLDB)
Вероятно, если вы добавите некоторое использование foo
в следующие строки (даже println), его символ, мы надеемся, будет сохранен в IR, и вы сможете po foo
(Я согласен, что это все еще ошибка, но, по крайней мере, если она работает, у вас будет обходное решение и некоторое объяснение)
Ответ 4
Исправлено после настройки:
Optimization Level = None[-Onone]
в Компилятор Swift - Генерация кода
Обратите внимание, что установка Optimization Level
под Apple LLVM 8.0 - Генерация кода не имеет эффекта
Ответ 5
Если ваш проект использует Swift, в настройке проекта/цели есть два отдельных параметра "Уровень оптимизации". Это не только "SWIFT_OPTIMIZATION_LEVEL". Проверьте эту ссылку: fooobar.com/info/41037/...
Я оставлю его здесь, если он кому-то поможет.