Если я хочу, чтобы мое приложение больше не работало, могу ли я просто принудительно развернуть что-то и заменить его в качестве предварительного условия?
- Это потому, что мы хотим остановить/выйти из приложения и в основном не хотим, чтобы какой-либо поток управления или изменение состояния, и поэтому мы используем утверждения/предварительные условия, которые также приходят с простое ведение журнала удобочитаемых сообщений (помогает нам не писать постоянно
print
s)? - Вещи, для которых мы используем утверждения, имеют жизненно важное значение, операторы защиты в конечном итоге являются системой потока управления, которая, даже если ваша функция возвращается раньше, не обязательно означает, что ваше приложение должно рухнуть.
И если это нечто большее, чем nil
s, например, вам нужна String, а пользователь дает вам Int, тогда вы можете использовать обработку ошибок.
ИЗМЕНИТЬ:
Мне не нужны мнения, я спрашиваю об этом только для того, чтобы понять, какое удобство утверждения предоставляют по сравнению с упомянутыми альтернативами. Нумерованный список является ядром моего вопроса.
if let
противоположно принудительному развертыванию (при котором используется!
). - person rmaddy   schedule 24.02.2017assert
иprecondition
можно использовать без опций, верно? Вы можете утверждать любое логическое условие, а не только значениеnil
. Если вы погуглите, когда использовать утверждения, вы увидите кучу обсуждений на эту тему. Это языковой агностик. - person JAL   schedule 24.02.2017assert
, когда можно использоватьguard
и другие современные функции, предоставляемые Swift. Вполне возможно, что устаревший программист, который не знает всех функций, предоставляемых Swift, вернется к использованию утверждений, но я вообще не нахожу тот самый Swifty. Но опять же, это все стиль и на усмотрение программиста. - person JAL   schedule 24.02.2017assert
s будут удалены в сборках -O (как говорится в связанных вопросах и ответах), в то время как другие упомянутые вами параметры не будут (они останутся в производственном коде, хотя!
не будет проверятьnil
в -Ounchecked builds) — что делает его пригодным для проверки работоспособности значений во время отладки. - person Hamish   schedule 24.02.2017assert
иprecondition
предназначены для обнаружения состояния, которое настолько необычное и неожиданное, что вы не можете с ним справиться, и, возможно, вы не хотите его обрабатывать, потому что оно указывает на что-то очень неправильное, например, повреждение стека или кучи. Кстати, принудительная распаковка сама по себе смутно эквивалентнаfunc forceUnrwap<T>(thing: T?) -> T { guard let thing = thing else { preconditionFailure() }; return thing }
, так что вот что. Но, как уже упоминалось, это стилистическая вещь, такая как вкладки против пробелов или фигурная скобка перевода строки. - person joeybladb   schedule 24.02.2017