加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 04:41:47 所属栏目:百科 来源:网络整理
导读:在回答 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 (那些已
在回答 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读