2014-09-26 86 views
5

我试着做一些简单的UIView布局的数学在迅速和尝试下面的代码行...在Swift中用CGFloats做数学的最好方法是什么?

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) 
           ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  

编译器错误ISN这一切都很有帮助,但看起来Double,Int和CGFloat之间存在某种类型的冲突。我可以通过在CGFloats的某些显式创建中进行编译,但我无法相信这是做到这一点的正确方法。

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

什么是正确的方法?

回答

7

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

从devforums一些随访(这可能使你快乐或悲伤,但至少大致说明了当前状态):https://devforums.apple.com/message/1026028#1026028

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

+0

感谢devforums链接,是的,这是讨厌的,但有道理。我希望他们找到一个优雅的解决方案,我希望我们不必等待下一个WWDC,然后才能开始使用它。 – 2014-09-26 20:28:42

相关问题