Я запускаю Xcode 7.3.1. При создании моего проекта, основанного на Swift, он зависает на "Компиляция исходных файлов Swift". Я пробовал различную комбинацию удаления DerivedData
, очистки, запуска, перезапуска Xcode, перезапуска OS X, ни один из них не работает. Любые идеи?
Xcode зависает на "Компиляция исходных файлов Swift"
Ответ 1
Спасибо за предложения всех комментаторов. Я сузил его до закрытия map
, ссылаясь на свойство, которое я удалил. Пример:
var people: [Person] = ...
let foo = people.map { "\($0.name), \($0.age)" }
где Person
выглядит примерно так:
protocol Person {
var name: String { get }
var age: Int { get }
}
Все это прекрасно работает. Затем я удалил age
, сохраняя закрытие без изменений. Это привело к тому, что Xcode стал безнадежно запутанным. Вероятно, связано с выводом типа Swift.
Ответ 2
Я сделал класс, расширяющий себя. Это также заставляет компилятор Swift застревать в цикле без ошибок:
class X: X
Ответ 3
Попробуйте очистить папку сборки проекта
- Удерживайте нажатой клавишу выбора и подключитесь к продукту → Очистить папку сборки (где в меню используется Clean)
- Если вы используете CocoaPods, удалите файл рабочей области и запустите
Pod Install
илиPod Update
Я думаю, что 2, вероятно, является причиной.
Ответ 4
Измените "Уровень оптимизации Sweeper Compiler" в настройках сборки с "Оптимизация всего модуля" на "Оптимизация отдельных файлов". Возможно, это не ваша проблема, но она решила, что я застрял на полдня. Это может быть временной ошибкой в недавней версии Xcode (8.2.1 был тем, который я использовал в то время, когда я это написал).
Ответ 5
У меня была та же проблема. В моем случае это, по-видимому, результат применения слишком большого количества коалиционных действий. Я создавал элемент json:
json = [ "item1": value1 ?? "",
"item2": value2 ?? "",
"item3": value3 ?? "",
...
"item14": value14 ?? "" ]
Это не скомпилируется. Когда я удалил все нисходящее объединение, чтобы оно выглядело следующим образом, оно скомпилировалось отлично.
json = [ "item1": value 1,
"item2": value 2,
"item3": value 3,
...
"item14": value 14 ]
Я не пытался определить точку отсечки для количества элементов, прежде чем она застряла.
Ответ 6
Кажется, существуют различные возможные причины чрезвычайно долгого времени компиляции. Угловые или крайние случаи есть везде. Так что лучший способ - это наблюдать и расследовать собственное дело.
Хотя упомянутое другими в комментариях, но шаги ниже все еще заслуживают большего внимания:
- Запустить проект
- Переключитесь на Report Navigator (команда + 9) и выберите текущую задачу
Build
. Посмотрите, какой исходный файл занимает много времени компиляции. - Проверьте историю последних изменений этого исходного файла. Расследовать возможную причину.
Ответ 7
В моем случае проблема была во время разбора JSON. Я отправил необязательное значение в параметр словаря во время разбора JSON.
Ответ 8
Наблюдение за наложением отчета помогло мне найти проблему. В моем случае проблема заключалась в том, что я попытался добавить ограничения автоматической компоновки к программно добавленному представлению UITableView
в UITableViewController
.
Ответ 9
xcode, похоже, имеет проблему, связывающую более 5 строк. Видеть это: Xcode зависает при попытке выполнить это на игровой площадке Swift? Данное обходное решение решило мою проблему
Ответ 10
В моем случае XCode stucks на большом словарном литерале:
requestParameters = [
"asset" : "...",
"user" : "...",
// about 15 additional keys
]
Проблема была исправлена после замены этой части на:
var requestParameters = [String : Any]()
requestParameters["asset"] = "..."
requestParameters["user"] = "..."
// about 15 additional keys
Ответ 11
в моем случае я изменил
bookingPassengers.append(["paxType": passengersData[passIndex].travellerKind ?? " " ,
"firstName": passengersData[passIndex].firstName ?? " " ])
к
bookingPassengers.append(["paxType": passengersData[passIndex].travellerKind! ,
"firstName": passengersData[passIndex].firstName! ])
После этого все стало хорошо
Ответ 12
Поэтому я считаю, что в большинстве случаев это общеизвестный словарь буквального типа с помехами.
Код как это:
let params = [
"title": title, "desc": desc, "velikost": velikost,
"cena": cena, "vykon": vykon, "telefon": telefon,
"rokVyroby": rokVyroby, "stkDo": stkDo,
"zemePuvodu": zemePuvodu, "najetoKilometru": najetoKilometru,
"stav": stav, "ZnackaId": znackaId,
"VyrobceId": vyrobceId,
"category": categoryId, "subCategory": subCategoryId,
"modely[]": modelId, "prodejNakup": prodejNakup,
"mena": mena, "isNovy": isNovy, "serviska": serviska,
"abs": abs, "technicak": technicak,
]
Надо писать лучше всегда так:
let params: [String: String] = [
"title": title, "desc": desc, "velikost": velikost,
"cena": cena, "vykon": vykon, "telefon": telefon,
"rokVyroby": rokVyroby, "stkDo": stkDo,
"zemePuvodu": zemePuvodu, "najetoKilometru": najetoKilometru,
"stav": stav, "ZnackaId": znackaId,
"VyrobceId": vyrobceId,
"category": categoryId, "subCategory": subCategoryId,
"modely[]": modelId, "prodejNakup": prodejNakup,
"mena": mena, "isNovy": isNovy, "serviska": serviska,
"abs": abs, "technicak": technicak,
]
Но я полагаю, что даже более короткие литералы являются проблемой, и для экономии времени, ожидая сборки, лучше всегда определять тип литералов словаря, чтобы компилятору не приходилось узнавать самому, так как он явно борется. PS: Я думаю, что у инженеров Apple есть серьезные личные проблемы, они должны нанимать людей из Jatbrains или, может быть, даже меня;), чтобы сосредоточиться на важных вещах, а не тратить время на обсуждение того, как Swift должен отличаться от других...
Ответ 13
Я удалил репозиторий git, затем отозвал его, казалось, чтобы решить проблему