var x = CGfloat(0.5) var result: CGfloat #if arch(x86_64) || arch(arm64) result = ceil(x) #else result = ceilf(x) #endif // use result
(那些已经混淆的背景信息: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 }}
其余代码将更清晰:
var x = CGfloat(0.5)x.ceil总结
以上是内存溢出为你收集整理的swift – 是否应该使用条件编译来应对不同体系结构中CGFloat的差异?全部内容,希望文章能够帮你解决swift – 是否应该使用条件编译来应对不同体系结构中CGFloat的差异?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)