Ios 从UInt32转换为Int时溢出
我对Swift/Xcode有一个非常奇怪的问题(老实说,我不太确定源代码在哪里) 我必须输入以下代码:Ios 从UInt32转换为Int时溢出,ios,swift,swift2,Ios,Swift,Swift2,我对Swift/Xcode有一个非常奇怪的问题(老实说,我不太确定源代码在哪里) 我必须输入以下代码: extension Int { func random(min : Int = 0, max : Int = Int(UInt32.max - 1)) { return min + Int(arc4random_uniform(UInt32(max - min + 1))) } } 当我在Xcode中构建这段代码时,它工作得非常好。但是,当我尝试使用xcode
extension Int {
func random(min : Int = 0, max : Int = Int(UInt32.max - 1)) {
return min + Int(arc4random_uniform(UInt32(max - min + 1)))
}
}
当我在Xcode中构建这段代码时,它工作得非常好。但是,当我尝试使用xcodebuild
构建它时,编译器会给出以下错误:
integer overflows when converted from 'UInt32' to 'Int'
public static func random(min : Int = 0, max : Int = Int(UInt32.max - 1)) -> Int {
这很奇怪,因为Int.max
和UInt32.max
的值不接近
如果有任何帮助,我将使用Xcode 7.0 beta 5进行编译…,因为我完全被难住了。如果为32位设备(如iPhone 5)编译,则会发生此错误, 因为
Int
是一个有符号的32位整数,UInt32.max-1
在它的范围之外
另一个问题是计算UInt32(max-min+1),
由于溢出(例如,如果您调用
random(min : Int.min, max : Int.max)
请参阅,以获取可避免的解决方案
为任意范围生成随机数时溢出。如果从Int到UInt32,则没有问题。但是您试图从UInt32转换到UInt32会导致问题。@BlackFrog:在64位体系结构上,从UInt32转换到UInt32可能会有问题。