Cocoa 二进制运算符'+';不能应用于两个CGFloat操作数?

Cocoa 二进制运算符'+';不能应用于两个CGFloat操作数?,cocoa,swift,cgfloat,Cocoa,Swift,Cgfloat,在Swift中编码并获取上述错误 消息是否屏蔽了其他内容,或者您真的不能添加两个CGFloat操作数?如果没有,为什么(地球上)没有 编辑 我试图做的代码没有什么特别之处;有趣的是,上面的错误消息,逐字逐句,是Swift助手编译器告诉我的(在我的代码下面用红色的曲线划线) 运行Xcode 6.3(Swift 1.2)完全可以使用二进制运算符“+”添加两个CGFloat变量。您需要知道的是,结果变量也是一个CGFloat变量(基于类型推断原则) 编辑: 根据Swift v3.0约定 let val

在Swift中编码并获取上述错误

消息是否屏蔽了其他内容,或者您真的不能添加两个CGFloat操作数?如果没有,为什么(地球上)没有

编辑 我试图做的代码没有什么特别之处;有趣的是,上面的错误消息,逐字逐句,是Swift助手编译器告诉我的(在我的代码下面用红色的曲线划线)


运行Xcode 6.3(Swift 1.2)

完全可以使用二进制运算符“+”添加两个CGFloat变量。您需要知道的是,结果变量也是一个CGFloat变量(基于类型推断原则)

编辑: 根据Swift v3.0约定

let value = CGFloat(12.0) + CGFloat(13.0)
println("value \(value)")

//The result is value 25.0, and the value is of type CGFloat.

我用这段看起来很无辜的代码遇到了这个问题:

func-foo(行:CTLine){
让我们上浮吧
让下降:CGFloat
让引导:CGFloat
设fWidth=Float(CtlineGettyPrographicBounds(直线、上升、下降和领先))
让高=天花板(上升+下降)
//                 ~~~~~~ ^ ~~~~~~~
}
并通过展开问题导航器中的错误找到解决方案:

查看它,我认为Swift首先根据返回类型找到了
+(lhs:Float,rhs:Float)->Float
函数(
ceilf
接受
Float
)。显然,这需要的是
Float
s,而不是
CGFloat
s,这对错误消息的含义有一定的帮助。因此,要强制它使用正确的运算符,您必须使用一个包装函数,该函数接受一个
Double
或一个
Float
(或者显然是一个
CGFloat
所以我尝试了这个,错误被解决了:

    // ...
    let height = ceilf(Float(ascent + descent))
    // ...
另一种方法是使用采用
Double
CGFloat
的函数:

    // ...
    let height = ceil(ascent + descent)
    // ...

所以问题是编译器将返回类型优先于参数类型。很高兴看到Swift 3中仍然存在这种情况;P

发生这种错误的原因主要有两种

第一名:

    // ...
    let height = ceilf(Float(ascent + descent))
    // ...
每当您尝试比较可选类型CGFloat变量时 像

这是导致错误的原因,因此如果是!>=B{}

秒: 每当您在那个时候直接使用value来获得结果时,就会发生这种错误

不要像上面那样使用。
与声明为CGFloat的对象一起使用


当然可以一个(小的,自包含的)代码示例演示您的问题将非常有帮助…我也得到了相同的错误,可能的原因是什么?谢谢。你刚刚证实了我没有发疯。苹果需要让
CGFloat
和斯威夫特的
Float
结构(还有希望的是
NSInteger
Int
等)相互配合,或者基于斯威夫特的原生类型设计一个全新的几何库。在那之前,搬到斯威夫特是一个真正的难题。我遇到了类似的事情。使用带有尾随的
f
的旧数学方法可以做到这一点。例如,如果你做
round
而不是
roundf
,这种情况就会消失。是的,在Swift 3中仍然会发生。错误消息级别:业余。
if a? >= b?
   {
     videoSize = size;
   }
var result = 1.5 / 1.2
var a : CGFloat = 1.5
var b : CGFloat = 1.2
var result : CGFloat!
result = a / b