我正在改变公开新方法的库,但它只适用于特定的架构。例如,如果从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()
不能很好地工作,因为它会触发运行时断言失败,而不是在编译时捕获用户错误。
答案 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!")
它们也可以在条件编译块中工作,这正是您要寻找的。 p>
#if os(macOS)
#warning("This library is for iOS only")
#endif