我是Swift编程的新手,我正在尝试开发一个简单的游戏,希望它能增加我对语言语法和逻辑的了解。当前,我在Swift中遇到一个问题,该问题指出“二进制运算符'%'无法应用于类型为'UInt32'和'UInt'的操作数”,并且由于我是该语言的新手,所以我不知道该如何解决。有人可以告诉我如何解决此问题,以及为什么首先造成该问题?
出于参考目的,我包括一种导致问题和问题名称的方法。
func randomFloatBetween(_ smallNumber: CGFloat, and bigNumber: CGFloat) -> CGFloat {
let diff: CGFloat = bigNumber - smallNumber
return ((CGFloat(arc4random() % (UInt(RAND_MAX) + 1)) / RAND_MAX) * diff) + smallNumber
}
答案 0 :(得分:1)
您只需将RAND_MAX
强制为UInt32
而不是UInt
并将RAND_MAX
强制为CGFLoat
:
func randomFloatBetween(_ smallNumber: CGFloat, and bigNumber: CGFloat) -> CGFloat {
let diff = bigNumber - smallNumber
return CGFloat(arc4random() % (UInt32(RAND_MAX) + 1)) / CGFloat(RAND_MAX) * diff + smallNumber
}
randomFloatBetween(1, and: 2) // 1.71263541686937
您还可以将约束ClosedRange
的{{1}}扩展到Bound
:
CGFloat
extension Range where Bound == CGFloat {
var random: CGFloat {
let diff = upperBound - lowerBound
return CGFloat(arc4random() % (UInt32(RAND_MAX) + 1)) / CGFloat(RAND_MAX) * diff + lowerBound
}
}