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

Mik*_*ers 5 math core-graphics uikit cgfloat swift

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

var offset: CGFloat = (bounds.width / 2.0) - ((sortedSymptoms.count * bounds.height) / 2.0)
Run Code Online (Sandbox Code Playgroud)

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

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

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

var offset: CGFloat = (bounds.width / CGFloat(2.0)) - ((CGFloat(sortedSymptoms.count) * bounds.height) / CGFloat(2.0))
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法?

Rob*_*ier 8

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

来自devforums的一些后续(可能会让你开心或悲伤,但至少大致解释当前状态):https://devforums.apple.com/message/1026028#1026028

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