¿Dónde debo usar preconditionFailure vs Assert vs fatalError?

Las afirmaciones son esencialmente afirmaciones if. Un ejemplo es que generalmente se usan cuando las aplicaciones requieren soporte para múltiples versiones de iOS donde puede haber funciones / bibliotecas / etc. depreciadas. Es solo para ser utilizado como una forma conveniente de asegurarse de que todas las versiones de compilación sean compatibles. Usualmente se utiliza más en el lado de la depuración / producción de la programación para probar el flujo de la aplicación.

Los errores fatales generalmente se usan para callejones sin salida. ¿La CPU se está volviendo loca debido a un flujo lógico y tiene hilos bloqueados? ¿Está sobrecargando su interfaz de usuario o está abusando / rompiendo el umbral del dispositivo por algún caso límite que finalmente arruinaría el dispositivo de alguna manera (corrupción de datos, desbordamiento de pila, etc.). El error fatal ayuda a registrar y finalizar la aplicación para que no cause más daños. Es una función utilizada por el propio Swift lang (índice fuera de rango, por ejemplo) y es una función de utilidad. Úselo para lo que sea que necesite, o no lo haga si no lo necesita.