首页 > 解决方案 > 二元运算符“%”不能应用于“UInt32”和“UInt”类型的操作数

问题描述

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

标签: swiftxcode

解决方案


您只需要强制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约束扩展BoundBinaryFloatingPoint

extension ClosedRange where Bound: BinaryFloatingPoint, Bound.RawSignificand: FixedWidthInteger {
    var random: Bound { return .random(in: self) }
}

let random1: CGFloat = (1.0...2.0).random    // 1.964941881451907

let random2: Float = (1.0...2.0).random    // 1.426581

let random3: Double = (1.0...2.0).random    // 1.706499406585947

推荐阅读