如何使用自定义消息强制Swift编译器错误

时间:2016-02-29 18:45:13

标签: swift compilation compiler-errors

我正在改变公开新方法的库,但它只适用于特定的架构。例如,如果从ARM程序集中调用它,我希望编译时错误指示您使用编译器条件来排除调用。有没有办法实现这个目标?如下所示:

public func x86Only() {
    #if arch(x86_64)
    // Do something here
    #else
        compiler_fail("x86Only() can only be called from x86_64 architecture")
    #end
}

对于Swift,是否存在类似于(发明的)compiler_fail()的内容?

fatalError()不能很好地工作,因为它会触发运行时断言失败,而不是在编译时捕获用户错误。

2 个答案:

答案 0 :(得分:2)

您正在寻找类似“编译时断言”的内容吗?

不幸的是,这还没有实现。但是“swift-evolution”列表中有一个相应的主题:

https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151221/003837.html

答案 1 :(得分:2)

从Swift 4.2开始,您可以使用#warning在Xcode中显示黄色警告,并使用#error显示红色的构建时错误。

例如,此代码将显示带有自定义消息的警告:

#warning("Fix this code before release!")

它们也可以在条件编译块中工作,这正是您要寻找的。

#if os(macOS)
#warning("This library is for iOS only")
#endif