swift - 有没有办法让Swift编译器忽略错误?

标签 swift compiler-errors compilation

我想在编译我的Swift代码时忽略错误。例如,您正在编写一个尚未在应用程序中使用并且有错误的类,或者如果编译器只是由于所有这些安全措施而变得愚蠢,那么您仍然可以编译它吗?您可以通过使编译器对其进行编译,即使它有点hacking了吗?

换句话说,如何将错误视为警告?

最佳答案

不,没有办法做到这一点。编译器错误是错误,不是由于某种原因发出的警告:它们是源代码不可恢复的问题。

程序可能会存在几种错误,这些错误可能会或可能不会在编译器的不同级别上捕获:

  • 语法错误:这些是您的源代码中的错误,使它成为无效程序。因为代码本身无效,所以不可能要求编译器继续编译程序,避免出现语法错误。例如,您不能期望编译器将?123?5445?,asdf,34124:::::!22编译为Swift程序,因为它不是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/

    相关文章:

    python - 是否可以在运行脚本之前使用 numba 编译代码?

    ios - 后台线程上的 Realm 通知 token

    Swift 如何从条件绑定(bind)必须具有可选类型的 do catch 返回元组?

    c++ - 静态库中命名空间内简单函数的编译错误

    android - 自定义着色器不适用于 Android 设备(使用 LibGDX)

    optimization - 哪些非局部效应可以改 rebase 本 block 的性能?

    ios - 为什么我的 Swift 应用存档如此之大?

    iOS : 'MyViewController' does not conform to protocol 'UITableViewDataSource'

    c# - CSharpCodeProvider在System.Collections.Generic下看不到Stack <T>类

    java - 错误: Could not find or load main class on Mac OSX