CGFloat没有转换为UInt32?

时间:2015-06-28 22:55:58

标签: swift type-conversion

通常这对我来说很好,但由于某种原因我现在收到错误“无法将类型'CGFloat'的值赋给'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

任何人都知道为什么我不允许转换它?任何帮助表示赞赏。谢谢!

1 个答案:

答案 0 :(得分:3)

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建议你在转换为floor之前还包括一个明确的roundInt(来自数学库),以明确你是什么样的四舍五入期望的。