Swift – 简单的if语句中的意外错误

我对Swift很陌生,所以这可能会变得非常简单,但是我无论如何都会问你,因为我弄不明白:

我在Playground上玩,并认为我会写一些代码行来做到这一点:在两个给定值(a,b)之间生成一个随机数。 例如,如果a = 5和b = 20,则假设将生成5和20之间的随机数。 但我得到一个意外的错误! 我写了这些代码行

var a = UInt32() var b = UInt32() var randomNumberInBetween = Int() a = 5 b = 20 if (b - a) > 0 { randomNumberInBetween = Int(arc4random_uniform(b - a) + a) } else { print("error", terminator: "") } 

现在:

如果b> a(所以(ba)> 0)它工作得很好。

如果b = a打印“错误”,所以它工作正常。

但是如果a> b,所以(ba)<0,它会给出这个错误:“执行被中断,原因:EXC_BAD_INSTRUCTION(code = EXC_l386_INVOP,subcode = 0x0)。

截图

我的问题是:如果(ba)<0不应该只是运行if语句的“else”部分,只是打印“错误”? 为什么会发生这种错误?

UInt32版本的-具有签名: (UInt32, UInt32) -> UInt32

7 – 9是-2。

你不能用一个无符号types如UInt32来表示-2。

尝试像这样:

 func random(inRange range: Range<Int>) -> Int { return range.lowerBound + Int(arc4random_uniform(UInt32(range.upperBound - range.lowerBound))) } func random(inRange range: ClosedRange<Int>) -> Int { return range.lowerBound + Int(arc4random_uniform(UInt32(range.upperBound - range.lowerBound + 1))) } print(random(inRange: 1..<10))