Swift - 简单if语句中出现意外错误

时间:2016-06-20 17:33:32

标签: ios swift

我是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(所以(b-a)> 0)它工作得很好。

如果b = a,则打印“错误”,因此它可以正常工作。

但是如果&gt; b,使(b-a)<0,它给出了这个错误:“执行被中断,原因:EXC_BAD_INSTRUCTION(代码= EXC_l386_INVOP,子代码= 0x0)。”

screenshot

我的问题是:如果(b-a)&lt; 0不应该只运行if语句的“else”部分而只打印“错误”?为什么会出现这种错误?

1 个答案:

答案 0 :(得分:3)

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

7 - 9是-2。

您无法使用无符号类型表达-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))

尝试类似:

$output .='<div class="searchdiv"> <b>'.$tit.' </b>- '.$art.' <br> <a href="#" onclick="window.open('.$prev.', "_blank", "width=600,height=350");" >preview tutorial</a> - <a href="'.$wat.'" target="blank">watch full tutorial</a></div>';