Swift   发布时间:2022-04-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了swift – 是否应该使用条件编译来应对不同体系结构中CGFloat的差异?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在回答 this earlier question关于在CGFloat上使用ceil()来编译所有体系结构时,我提出了一个解决方案:

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的差异?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。