Эта диагностика на самом деле не о времени. Речь идет о памяти. Так что неважно, насколько быстро компьютер. Не нужно беспокоиться о том, что он будет вести себя по-разному на разных машинах (хотя см. Ниже).
От CSSolver.cpp
:
// If the solver has allocated an excessive amount of memory when solving for
// this expression, short-circuit the binding operation and mark the parent
// expression as "too complex".
if (cs.TC.Context.getSolverMemory() >
cs.TC.Context.LangOpts.SolverMemoryThreshold) {
cs.setExpressionTooComplex(true);
return true;
}
(setExpressionTooComplex
происхождение, что диагностическая)
Ток SolverMemoryThreshold
составляет ~ 15MB.
Поскольку Swift переносится в разные архитектуры, возможно (хотя и маловероятно, ИМО), что вы можете получить эту ошибку на некоторых платформах, но не в других. Как правило, это будет работать в другом направлении, чем вы думаете. Например, 32-разрядной системе может быть разрешено идти дальше вниз по кроличьей скважине до того, как эта диагностическая пожар (поскольку 32-разрядные машины часто выделяют меньше памяти для структур данных). Но если вы нажмете 15 Мбайт, пытаясь оценить одно выражение, вы, вероятно, не собираетесь его решать только несколькими рекурсиями. Так что это было бы очень неожиданным и маловероятным результатом.
см. Http://stackoverflow.com/questions/33794574/swift-expression-was-too-complex-to-be-solved-in-reasonable-time?rq=1 – sschale
Разбить выражение, чтобы ошибка и не беспокойтесь об этом. Я имею в виду на самом деле, его аристократ – FruitAddict
Вопрос действительно один ИМО и отличается от связанного вопроса. Вопрос не в том, как избежать этой диагностики, когда это происходит на * вашей * системе; речь идет о том, чтобы не происходить на * других * системах. Оказывается, на самом деле это не проблема; но разумное прочтение диагностики предполагает, что это может быть. –