swift - 二元运算符“%”不能应用于“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
}
解决方案
您只需要强制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
约束扩展Bound
到BinaryFloatingPoint
:
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
推荐阅读
- java - 即使在龙目岛不是最终的,也无法使用二传手
- zabbix - zabbix 正则表达式触发多个字符串值
- amazon-web-services - 如何通过命令行检查 Jupyter 活动笔记本
- php - 如何在 wp_signon 之后以 elemntor 形式重定向到页面?
- java - 使用idea编译spring源码用5.2.7-RELEASE找不到log4j和slf4j包
- mysql - 来自 sql 表的平均值
- c++ - 提升 WSL 上的库位置
- cloud - 如何运行将数据加载到其他项目 BigQuery 表中的云作曲家任务
- bash - 删除特定时间范围内的文件
- sql - 哪个员工处理的订单最多?