我正在自学 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 {
你需要 minsRange
和 maxRange
是非可选的。
因此您可以使用 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/