我尝试在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))
什么是正确的方式?
答案 0 :(得分:8)
这是Swift中的一个已知问题,开发团队一直致力于改善CGFloat
周围的问题。但是在这个时候,是的,这就是你写它的方式。
来自devforums的一些后续内容(可能会让您感到高兴或悲伤,但至少大致可以解释当前状态):https://devforums.apple.com/message/1026028#1026028
请注意,这里的主要问题是文字2.0不会强制转换为CGFloat
,它可以说是应该的。但count
可能总是需要投射,意图。你不能总是安全地在数字类型之间进行转换,而Swift故意强迫你在每次进行这些类型的转换时都要考虑。但是应该可以确定文字转换在编译时是否安全,因此应该是可以修复的。