在swift中使用CGFloats进行数学运算的最佳方法是什么?

时间:2014-09-26 19:17:46

标签: math swift uikit core-graphics cgfloat

我尝试在swift中做一些简单的UIView布局数学,并尝试了以下代码行...

var offset: CGFloat = (bounds.width / 2.0) - ((sortedSymptoms.count * bounds.height) / 2.0)

并从编译器中得到以下错误:

cannot invoke '-' with an argument list of type '(($T6), ($T17))'
        var offset: CGFloat = (bounds.width / 2.0) - ((sortedSymptoms.count * bounds.height) / 2.0)
                              ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~    

编译器错误没有那么有用,但看起来某种类型的Double,Int和CGFloat之间存在类型冲突。我能够通过在CGFloats的一些明确创作中进行编译,但我无法相信这是正确的方法。

var offset: CGFloat = (bounds.width / CGFloat(2.0)) - ((CGFloat(sortedSymptoms.count) * bounds.height) / CGFloat(2.0))

什么是正确的方式?

1 个答案:

答案 0 :(得分:8)

这是Swift中的一个已知问题,开发团队一直致力于改善CGFloat周围的问题。但是在这个时候,是的,这就是你写它的方式。

来自devforums的一些后续内容(可能会让您感到高兴或悲伤,但至少大致可以解释当前状态):https://devforums.apple.com/message/1026028#1026028

请注意,这里的主要问题是文字2.0不会强制转换为CGFloat,它可以说是应该的。但count可能总是需要投射,意图。你不能总是安全地在数字类型之间进行转换,而Swift故意强迫你在每次进行这些类型的转换时都要考虑。但是应该可以确定文字转换在编译时是否安全,因此应该是可以修复的。