【发布时间】:2014-07-21 19:33:42
【问题描述】:
如果这能说明问题,这里是原始的 Objective-C 代码。
int x = (arc4random()%(int)(self.gameView.bounds.size.width*5)) - (int)self.gameView.bounds.size.width*2;
int y = self.gameView.bounds.size.height;
drop.center = CGPointMake(x, -y);
我从这段代码开始。第 2 行和第 3 行很好,为了清楚起见,我稍后再展示它们。
let x = CGFloat(arc4random_uniform(UInt32(self.gameView.bounds.size.width * 5))) - self.gameView.bounds.size.width * 2
let y = self.gameView.bounds.size.height
dropView.center = CGPointMake(x, -y)
在 Xcode 6 beta 3 中,必须将 arc4random_uniform UInt32 结果转换为 CGFloat 才能使减法和乘法起作用。这不再起作用,编译器显示错误:
‘CGFloat’不能转换为‘UInt8’
发行说明状态:
“CGFloat 现在是一种独特的浮点类型,它在 32 位架构上封装了 Float,在 64 位架构上封装了 Double。它提供了 Float 和 Double 的所有相同比较和算术运算,并且可以创建使用数字文字。使用 CGFloat 将您的代码与您的代码可能出现的情况隔离开来 ! 适用于 32 位,但在构建 64 位时失败,反之亦然。 (17224725)"
我只是在类型上做错了吗?我什至不知道如何更好地描述这个问题,以便向 Apple 提交 beta 4 的错误报告。我拥有的几乎每个 Swift 项目都受到了这个问题的影响,所以我寻找一些理智。
【问题讨论】:
-
关于问题报告,我觉得很简单,
UInt32不能转换成CGFloat,反之亦然。 -
发布为错误报告 17758869
标签: xcode swift type-conversion operator-overloading cs193p