“CGFloat”不能转换为“UInt8”和其他CGFloat问题与Swift和Xcod
发布时间:2020-12-13 20:15:07 所属栏目:Windows 来源:网络整理
导读:如果这个问题解决了,这里是原始的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); 我开始使用这
如果这个问题解决了,这里是原始的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将您的代码与您的代码的情况绝缘 我只是在做错事类型吗?我甚至不知道如何更好地描述这个问题向苹果公司提交错误报告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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |