Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从UInt32转换为Int时溢出_Ios_Swift_Swift2 - Fatal编程技术网

Ios 从UInt32转换为Int时溢出

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

我对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中构建这段代码时,它工作得非常好。但是,当我尝试使用
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可能会有问题。