在Swift中迫使崩溃的最简单方法

41

如何在Swift中最容易地强制崩溃?

我想只使用一行代码(可以快速添加)。

我不想使用断点,实际上我想让应用程序崩溃。


1
尝试使用 abort() 函数。 - Ian
6个回答

112

通常情况下,您会使用

fatalError()
或者
preconditionFailure()

对于这个问题。

它们的作用完全相同:终止程序,因此该语句后面的代码永远不会被执行。所有具有此行为的函数都带有@noreturn属性注释。

您还可以像这样做:

func getInt() -> Int {
    fatalError()
}

这个函数本应该返回一个整数,但由于程序从未到达那一点,你不必返回任何东西。


这个能放到发布的应用里吗?它会经过认证流程吗?我的意思是,当然在这个过程中应用不能崩溃,但对我来说,它只是检查确切的日期(从现在开始两个月后),然后调用fatalError。 - Libor Zapletal
@LiborZapletal 你的应用程序必须不经常崩溃才能被接受,最好在出现错误时处理它们。只有当发生严重错误时,你的应用才应该崩溃。 - Kametrixom

42
[0][1]

这是试图访问一个只有一个元素的数组的第二个元素。


38
[][0] 翻译成中文是“比[]少一个字符”。 - julien_c
11
喜欢简洁,但它不像“fatalError()”那样易于自我记录。 - Peter DeWeese
2
“0/1”比“零或一”短三个字符。 - Sazzad Hissain Khan
@SazzadHissainKhan 0/1 == 0 :-) (注:这是一段程序相关的内容,无法进行翻译。) - RemembranceNN
@RemembranceNN 那么编译器应该被更改。这真的是一个错误的输出。 - Sazzad Hissain Khan
2
@SazzadHissainKhan。为什么0/1输出0是错误的?我想你的意思是1/0。 - chadbag

4

如果您已经声明了一个可选变量,只需调用它(不要忘记解包),即使它的值为nil,您也可以尝试访问它。但是这会导致程序崩溃。


3

反向范围,

21...3

线程1: 致命错误: 无法使用上限小于下限形成范围(Range)。

1
如果您有一个整数变量,您可以将其乘以整数限制。(对于UInt也是相似的方法)

1
import Darwin

exit(0)

C库函数void exit(int status)会立即终止调用进程。属于该进程的任何打开文件描述符都会关闭,该进程的任何子进程都将被进程1(init)继承,并向该进程的父进程发送SIGCHLD信号。

1/0

    var a = 0

    override func viewDidLoad() {
        super.viewDidLoad()
        _ = 1/a

1
虽然这段代码可能回答了问题,但最好包含一些上下文,解释它的工作原理以及何时使用它。仅有代码的答案从长远来看并不有用。 - Mustafa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接