swift – 是否应该使用条件编译来应对不同体系结构中CGFloat的差异?

swift – 是否应该使用条件编译来应对不同体系结构中CGFloat的差异?,第1张

概述在回答 this earlier question关于在CGFloat上使用ceil()来编译所有体系结构时,我提出了一个解决方案: var x = CGFloat(0.5) var result: CGFloat #if arch(x86_64) || arch(arm64) result = ceil(x) #else result 在回答 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的差异?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1007168.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存