[swift]随机数与用户定义的范围

标签: Swift
发布时间: 2017/3/6 23:00:13
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我在自修 Swift 和困与随机函数。

想要实现什么︰ 用户是能够指定最小和最大值的范围。

我有了现在的按钮,在那里我相信我声明了一个整数作为文本的代码︰

@IBAction func generateNumbers(sender: AnyObject) {

    let minRange:Int? = Int(lowValue.text!)
    let maxRange:Int? = Int(highValue.text!)

    func randomNumber(range: Range<Int> = minRange...maxRange) -> Int {
        let min = range.startIndex
        let max = range.endIndex
        return Int(arc4random_uniform(UInt32(max - min))) + min
    }
}

显然 minRange 和 maxRange 并不是有效的整数的范围,我只想知道我哪里错了。

提前感谢任何援助。

解决方法 1:

当别人已经确定,你 minRangemaxRange。 他们必须是 Int ,不 Int? ,形成范围。

此外,您应该避免使用 ! 打开文本字段中,以防他们是 nil

如果你有一些合理的默认值为 minRangemaxRange (如 110 ),您可以使用零合并运算符来解开你的文本字段和值替换为默认值,如果文本字段不能转换为 Int :

@IBAction func generateNumbers(sender: AnyObject) {

    let minRange = Int(lowValue.text ?? "") ?? 1
    let maxRange = Int(highValue.text ?? "") ?? 10

    func randomNumber(range: Range<Int>) -> Int {
        let min = range.startIndex
        let max = range.endIndex
        return Int(arc4random_uniform(UInt32(max - min))) + min
    }

    // test
    let results = randomNumber(minRange...maxRange)
    self.field1.text = String(results)
}

注意︰ 编译器是满意使用值 minRangemaxRange 设置的默认值为 range ,所以我将它们添加到的调用 randomNumber


以及还有另一个潜在疑难杂症在这里。 如果你不能形成一系列 minRange 大于 maxRange ,所以你应该检查,以及︰

var minRange = Int(lowValue.text ?? "") ?? 1
var maxRange = Int(highValue.text ?? "") ?? 10
if minRange > maxRange {
    // Swap 'em
    (minRange, maxRange) = (maxRange, minRange)
}

为什么甚至是酷刑自己无论如何创建范围吗? 由于 randomNumber 声明内的 generateNumbers 您可以只使用 minRangemaxRange :

@IBAction func generateNumbers(sender: AnyObject) {

    var minRange = Int(lowValue.text ?? "") ?? 1
    var maxRange = Int(highValue.text ?? "") ?? 10
    if minRange > maxRange {
        // Swap 'em
        (minRange, maxRange) = (maxRange, minRange)
    }

    func randomNumber() -> Int {
        return Int(arc4random_uniform(UInt32(maxRange - minRange))) + minRange
    }

    //test
    let results = randomNumber()
    self.field1.text = String(results)
}
赞助商