当生成随机CGFloat时,我使用以下代码。 Some explanation here
html, body {
/* this seems not to solve the problem */
overflow: hidden;
-webkit-overflow-scrolling: auto;
}
.scrollable-div {
overflow-x: hidden;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
/* div has a fixed position */
position: fixed;
top: 3em;
right: 3em;
bottom: 3em;
left: 3em;
/* just for styling */
background-color: #999999;
}
曾经很好。现在工作正常。
我升级到Swift 5后出现警告。
'4294967295'不能完全表示为'Float';它变为“ 4294967296”
到代码行
extension CGFloat{
static func randomFloat(from:CGFloat, to:CGFloat) -> CGFloat {
let randomValue: CGFloat = CGFloat(Float(arc4random()) / 0xFFFFFFFF)
return randomValue * (to - from ) + from
}
}
如何解决?
答案 0 :(得分:7)
最简单的解决方案:放弃您的代码,只需调用https://developer.apple.com/documentation/coregraphics/cgfloat/2994408-random。
答案 1 :(得分:5)
您知道Float
仅具有24位有效数,因此32位值0xFFFFFFFF将被截断。因此,Swift向您警告Float
不能精确表示值0xFFFFFFFF
。
简短的解决方法是这样的:
let randomValue: CGFloat = CGFloat(Float(arc4random()) / Float(0xFFFFFFFF))
显式使用Float.init
时,Swift不会生成此类警告。
但是首选的方法是使用哑光答案中建议的random(in:)
方法:
return CGFloat(Float.random(in: from...to))
或简单地:
return CGFloat.random(in: from...to)