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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |