5

我试图在 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))

什么是正确的方法?

4

1 回答 1

8

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

devforums 的一些跟进(可能让你高兴或悲伤,但至少大致解释了当前状态):https ://devforums.apple.com/message/1026028#1026028

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

于 2014-09-26T19:20:21.917 回答