Xcode - Недопустимый символ в исходном файле (заменить "на" ")

У меня вопрос о Xcode (Swift). Иногда, когда я пишу оператор if. Что-то вроде этого:

if(a == 2){
//do Sth
} else {
//do Sth
}

Xcode вызывает ошибку: "Недопустимый символ в исходном файле" Я знаю, что это не имеет большого значения и исправлено, нажав "Fix-it", но я хочу знать, в чем проблема. Это не имеет смысла для меня...

Ошибка

Мой Xcode находится на 7.2, и я использую Swift - я не знаю, является ли это просто проблемой Swift.

Ответ 1

У меня была эта проблема. То, как я решил это: 1) копировать все, что у вас есть, в Sublime Text или другой редактор кода и иметь представление (возможно, вам нужно включить просмотр скрытых символов). У меня был код в DC2, который является своего рода символом управления ASCII. Для меня это было вызвано тем фактом, что я поставил игровое поле в ручное исполнение и привязал к нему ярлык клавиатуры, который, казалось, вводил этот управляющий символ каждый раз, когда я его выполнял, используя ярлык. Я просто изменил ярлык и удалил символы ASCII, поскольку я смог увидеть их в Sublime Text. (Ссылка в комментариях к OP относительно режима слева направо не имела смысла и не работала для меня.)

Ответ 2

Я столкнулся с этой проблемой, когда я использовал клавиатуру, отличную от Apple, с моим iMac. Возможно, и ваше дело. Они добавляют лишние контрольные символы! Один из способов исправить его в Xcode можно выбрать из меню "Редактор" > "Показать невидимые" и посмотреть, есть ли какие-либо нежелательные символы, в которых возникает ошибка, и удалять их.

Ответ 3

Редактор- > Показать "Невидимые" не отображали персонажа, который вызывал у меня проблему. Безразрывное пространство (u00a0) будет отображаться как пробел без индикатора "точка". Тем не менее, это действительно трудно увидеть, и я полностью пропустил это в первый раз. Zoom помогает.

Один из способов обнаружения недопустимых символов - использовать код Visual Studio и включить настройки:

"editor.renderControlCharacters": true "editor.renderWhitespace": "all"

Это имеет ту же проблему видимости, что и без прерывания, как Xcode, однако он показывает другие специальные символы.

Чтобы сделать его более очевидным и, возможно, обнаружить более недопустимые символы, установите расширение "ascii-unicode-escape" и следуйте инструкциям.

Я не понимаю, почему Xcode разрешает эти недопустимые символы, вставляет их в исходные файлы без причины и даже не дает возможности их обнаруживать! Я пытаюсь написать код, а не секреты невидимых чернил, черт возьми! Я предполагаю, что это не проблема для скомпилированного кода, который покажет ошибку, но не так удобен с шейдерным кодом.

Ответ 4

У меня такая же проблема. После тщательного тестирования я нашел решение. Надеюсь, это может спасти другие обширные часы исследований этого ужасного опыта Xcode.

Проблема заключается в том, что у меня есть клавиатура FILCO Minila, у которой есть клавиша "App" рядом с "стрелкой влево". Я бы случайно нажал "Приложение" при наборе текста очень быстро, и он попал в невидимый символ "DEL" (Data Link Escape, Unicode 0010). Его можно было увидеть только при копировании в Sublime. Это даже не видно под Xcode собственный "Редактор → Показать невидимые" (Говоря о хорошем пользовательском опыте...)

Магически это не происходит с Sublime или VSCode, только для Xcode. Так что никаких оправданий для Xcode, я думаю?

Исправление заключается в том, чтобы загрузить Karabiner, расширенную клавиатуру для macOS и сделать недействительным ключ "App" или сопоставить его с чем-то другим. Karabiner также аннулирует ваше сопоставление клавиш в конфигурации клавиатуры по умолчанию в системе. Поэтому вам придется переделать такие вещи, как "cmd", "alt", если вы их настроили. Если это так, обязательно сопоставьте оба левого и правого клавиш модификатора в Karabiner, потому что в соответствии с просмотром ключевых событий Karabiner ключевая карта по умолчанию будет отображать left_alt и left_cmd в right_cmd и right_alt... Просто раздражает, как ад...

Мне потребовалось 2 месяца, чтобы понять эту проблему, и 2 часа, чтобы на самом деле найти ее ключ "app", который виновен и исправить.