CGFloat 没有转换为 UInt32?

CGFloat not converting to UInt32?

通常这对我来说工作正常,但出于某种原因我现在收到错误 "Cannot assign a value of type 'CGFloat' to a value of type 'Int'"。我只是想将随机生成的整数转换为 CGFloat。但是,似乎代码 UInt32(self.view!.frame.width - dotRadius * 2) 正在生成错误。这是代码:

    x = CGFloat(arc4random_uniform(UInt32(self.view!.frame.width - dotRadius * 2))) + dotRadius

这里是我声明 dotRadius 变量的地方:

var dotRadius: CGFloat = 0

有人知道为什么我不能转换吗?任何帮助表示赞赏。谢谢!

CGFloat(...)部分没问题;错误消息并不是说你不能 显式 将整数 转换为 CGFloat,而是说你不能 隐式 CGFloat 转换为 Int。更具体地说,我认为它是因为最后的作业而抱怨 x = ...;右边的部分是一个 CGFloat,我猜 x 是一个 Int?

如果是这样,那么您应该能够通过添加从 CGFloat 到 Int 的显式转换来解决此问题:

x = Int(CGFloat(arc4random_uniform(UInt32(self.view!.frame.width - dotRadius * 2))) + dotRadius)

This Stack Overflow answer 建议您在转换为 Int 之前还包含一个明确的 floorround(来自数学库),以明确哪种类型四舍五入。