加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

“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将您的代码与您的代码的情况绝缘
对于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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读