如果这个问题解决了,这里是原始的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位架构上的浮点或64位架构上的Double包装起来,它提供了Float和Double的所有相同的比较和算术运算,可以使用数字文字使用CGFloat将您的代码与您的代码的情况绝缘
对于32位而罚款,但是在构建64位时反而失败. (17224725)”
我只是在做错事类型吗?我甚至不知道如何更好地描述这个问题向苹果公司提交错误报告4.几乎每一个Swift项目,我有这样的点或直觉操纵被这个问题打击了,所以我是寻找一些理智.
由于Swift不具有隐式类型转换,因此您必须指定发生的所有类型转换.这个案例特别乏味,就是目前Swift似乎在CGFloat和UInt32之类的类型之间缺少直接的转换,你必须按照你的发现进行中间类型的转换.
最后,arc4random_uniform需要两次双重转换:
let bounds = CGRectMake(0.0,0.0,500.0,500.0) var x = CGFloat(UInt(arc4random_uniform(UInt32(UInt(bounds.size.width) * 5)))) x -= bounds.size.width * 2 let center = CGPointMake(x,-bounds.size.height)