二进制运算符'%'不能应用于类型'UInt32'和'UInt'的操作数

时间:2018-08-12 00:05:57

标签: swift xcode

我是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
    }

1 个答案:

答案 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
    }
}