gpt4 book ai didi

xcode - “CGFloat”无法转换为 ‘UInt8' 以及 Swift 和 Xcode 6 beta 4 的其他 CGFloat 问题

转载 作者:IT王子 更新时间:2023-10-29 05:23:49 24 4
gpt4 key购买 nike

如果这说明了问题,这里是原始的 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 项目都会受到这个问题的影响,所以我寻找一些理智。

最佳答案

由于 Swift 没有隐式类型转换,您必须指定所有发生的类型转换。是什么让这种情况特别乏味,目前 Swift 似乎缺乏 CGFloatUInt32 等类型之间的直接转换,你必须通过中间类型发现。

最后,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)

关于xcode - “CGFloat”无法转换为 ‘UInt8' 以及 Swift 和 Xcode 6 beta 4 的其他 CGFloat 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24873219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com