在回答之前关于使用ceil()CGFloat编译所有体系结构的问题时,我提出了一个解决方案:
var x = CGFloat(0.5)
var result: CGFloat
#if arch(x86_64) || arch(arm64)
result = ceil(x)
#else
result = ceilf(x)
#endif
// use result
Run Code Online (Sandbox Code Playgroud)
(对于那些已经混淆背景信息:CGFloat的是一个"浮动"型的32位体系结构,对于64位体系结构"双"(即编译的目标),这就是为什么只使用的任ceil()或ceilf()上也不会总是编译,取决于目标体系结构.请注意,您似乎无法CGFLOAT_IS_DOUBLE用于条件编译,只有架构标志......)
现在,这引起了关于在编译时修复事物与运行时间的评论中的一些争论,等等.我认为,我的回答被接受得太快,无法吸引对此有关的一些好的辩论.
所以,我的新问题:如果你想让你的iOS和OS X代码在32位和64位设备上运行,上面是一个安全,明智的事情吗?如果它是理智和明智的,还有更好的(至少是有效的,而不是"icky")解决方案吗?
马特,
基于您的解决方案,如果您在多个地方使用它,那么一点点扩展可能会使其更容易接受:
extension CGFloat {
var ceil: CGFloat {
#if arch(x86_64) || arch(arm64)
return ceil(x)
#else
return ceilf(x)
#endif
}
}
Run Code Online (Sandbox Code Playgroud)
其余的代码会更清晰:
var x = CGFloat(0.5)
x.ceil
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
938 次 |
| 最近记录: |