我想在编译我的Swift代码时忽略错误。例如,您正在编写一个尚未在应用程序中使用并且有错误的类,或者如果编译器只是由于所有这些安全措施而变得愚蠢,那么您仍然可以编译它吗?您可以通过使编译器对其进行编译,即使它有点hacking了吗?
换句话说,如何将错误视为警告?
最佳答案
不,没有办法做到这一点。编译器错误是错误,不是由于某种原因发出的警告:它们是源代码不可恢复的问题。
程序可能会存在几种错误,这些错误可能会或可能不会在编译器的不同级别上捕获:
?123?5445?,asdf,34124:::::!22
编译为Swift程序,因为它不是Swift代码。 func foo(_: String) {}; foo(5)
有一个语义错误:您正在将Int
传递给需要String
的函数。过去的语义验证之后,编译器需要决定为给定的表达式生成哪种中间语言代码。它为foo(5)
生成什么代码?可以粉碎寄存器和堆栈状态以将任何值传递到任何地方,但这显然与Swift所代表的一切相反。super.init
错误是语言规则的强制执行(在将self
传递到函数或在self
上调用方法之前,必须初始化所有实例变量)。 @JoshCaswell在上面的注释中提到了未定义的行为-Swift的某些语义是为了从语言中消除未定义的行为而强制执行的规则(例如上述初始化程序规则)。没有“不安全”模式可以让您关闭这些规则以对Swift说“我不在乎这些规则的语义”,因为它们是使Swift成为其语言的代码。
我想不出任何允许您继续通过硬错误进行编译的编译器。甚至C和C++都是未定义行为的堡垒,也不允许这样做,因为经过错误编译会在编译器中引入未定义行为。一旦您尝试对无效的AST进行编码生成,一切就可以进行。您可以获得自相矛盾或没有意义的程序。就像假设错误的陈述为真允许您证明任何事情一样,如果您采用无效的代码并允许其进行编译,则所得程序可以执行任何数量的完全荒谬的事情。
关于swift - 有没有办法让Swift编译器忽略错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49349753/