swift - 具有用户定义范围的随机数

标签 swift random range

我正在自学 Swift 并且被 Random 函数困住了。

我想要实现的目标:用户能够指定范围的最小值和最大值。

我现在拥有的按钮代码,我相信我在其中将文本声明为整数:

@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 不是范围的有效整数,我只是想知道我哪里出错了。

在此先感谢您的帮助。

最佳答案

你快到了

问题是

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

被定义为可选项。

在这里

func randomNumber(range: Range<Int> = minRange...maxRange) -> Int {

你需要 minsRangemaxRange 是非可选的。

因此您可以使用 guard let 语句来安全地执行所需的解包

@IBAction func generateNumbers(sender: AnyObject) {

    guard let
        lowText = lowValue.text,
        highText = highValue.text,
        minRange = Int(lowText),
        maxRange = Int(highText)
    else {
        print("Couldn't find valid integers inside lowValue and highValue UITextFields. So I'm giving up...")
        return
    }

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

调用随机数

当然不要忘记最后调用你的函数randomNumber(1...10)

更新

@IBAction func generateNumbers(sender: AnyObject) {

    guard let
        lowText = lowValue.text,
        highText = highValue.text,
        minRange = Int(lowText),
        maxRange = Int(highText)
        else {
            print("Couldn't find valid integers inside lowValue and highValue UITextFields. So I'm giving up...")
            return
    }

    let result = Int(arc4random_uniform(UInt32(minRange - maxRange))) + minRange

}

关于swift - 具有用户定义范围的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37907817/

相关文章:

json - 在 Swift 中,如何检查一个对象是否是任何类型的集合?

c - 滞后的斐波那契生成器是如何随机的?

C++ 随机数检查非常小的概率

python - 为什么我不必使用 range() 在 for 循环中定义变量,但我必须在 Python 的 while 循环中定义变量?

Python 对大列表的随机抽样非常慢

swift - 如何从collectionView中的第二项开始?

xml - 在字符串匹配上拆分字符串数据

ios - 为什么 UICollectionView 中的单元格被截断了?

matlab - 如何在行和列中不重复的情况下生成随机矩阵?

vba - VBA (Excel) 中的范围减法