我在我正在使用的教程中遇到了这个不寻常的代码。
#if !(arch(x86_64) || arch(arm64))
func sqrt(a: CGFloat) -> CGFloat {
return CGFloat(sqrtf(Float(a)))
}
#endif
它看起来与我迄今为止学到的代码完全不同。我知道这是一个平方根功能但是标签?关于我的计算机架构的一些事情?
请用简单的语言向我解释。
答案 0 :(得分:2)
#if condition
// Code in here
#endif
这是一个条件编译指令 - 它用于隐藏编译器中的代码块。只有条件为真时才会编译块中的代码。
它支持多种语言,特别是C和C ++。它通常用于解释处理器体系结构和操作系统的差异 - 允许一个代码库在许多不同的平台上进行编译。
它还可用于删除发布版本中的调试/跟踪代码。
条件在编译时评估一次,通常是在主编译器之前的源代码的初始传递中。
答案 1 :(得分:2)
您可以出于各种目的设置这种条件编译指令。
例如,您可能有DEBUG的环境和RELEASE的环境,具体取决于您要编译的可能不会使用相同的函数/值。
在您的情况下,#if !(arch(x86_64) || arch(arm64))
用于确定设备(或模拟器)的架构。
实际上,一些iDevice运行32位,其他64位(5S和更新版本)。 Float没有用同样的方式表示。
正如@Martin所写,您可能不必再使用此代码了:)