@IBAction func generateBtn(sender: UIButton) {
let strt = UInt32(strtNum.text!)
let end = UInt32(endNum.text!)
let ttlNums = Int(amtNums.text!)
let x = RandomNum()
var z = 0
while z<ttlNums{
let y = x.rndNumGen(strt!, end: end!)
z += 1
var h = [String]()
h.append(String(y))
let display:String = h.joinWithSeparator(", ")
winningNums.text = display
print (display)
}
}
我不知道这段代码有什么问题。我正在尝试将字符串显示放入标签中,并打印出随机数生成器中的最后一个数字。当我将它打印到控制台时,它会显示所有随机数。
答案 0 :(得分:1)
这里的主要问题是你的数组是在每次循环迭代中新创建的,并且你的标签是在每次循环迭代中设置的。这意味着数组将只包含在该迭代中生成的元素,之后它将重置为新数组,并添加一个新元素。数组需要在开始时初始化一次,并在循环中重复添加元素,然后在结尾处放入标签。
@IBAction func generateBtn(sender: UIButton) {
guard let startText = strtNum.text, let start = UInt32(startText),
let endText = endNum.text, let end = UInt32(endText),
let ttlText = amtNums.text, let ttlNums = UInt32(ttlText) else {
//one of these is nil, handle it gracefully here
return
}
let randomGenerator = RandomNum()
var h = [String]()
h.reserveCapacity(ttlNums)
for _ in 0..<ttlNums {
let randomNum = randomGenerator.rndNumGen(start, end: end)
h.append(String(RandomNum))
}
let display = h.joinWithSeparator(", ")
winningNums.text = display
print(display)
}
我做了一些其他更改,以使此代码符合Swift最佳实践和约定:
if let
或guard let
绑定来安全地处理nil值。for in
循环。我建议你自己做一些改变:
generateBtn
。功能/方法做事,他们是行动。它们应该用动词或动词短语命名。也许尝试displayRandomArray
。RandomNum
。根据它的外观,它根本不是一个数字,它是一个随机数生成器。也许试试RandomNumberGenerator
h
。.text
为零时发生的情况,或者当它包含不是UInt32的字符串时会发生什么(从而导致UInt32
初始化程序失败并返回{{ 1}})