@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)
}
}
我不知道这段代码有什么问题。我试图将字符串显示放入标签中,并打印出随机数生成器中的最后一个数字。当我将其打印到控制台时,它会显示所有随机数。
最佳答案
这里的主要问题是您的数组在每次循环迭代中都是新创建的,并且您的标签是在每次循环迭代中设置的。这意味着该数组将仅包含该迭代中生成的元素,之后它将重置为新数组,并添加新元素。数组需要在开始时初始化一次,并在循环中重复添加元素,然后在最后放入标签一次。
@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
绑定(bind)来安全地处理 nil 值。 - 为变量指定有意义的名称。除特定情况外,避免使用单字母名称。
- 不要在函数/方法名称和前面的括号旁边添加空格。
- 不要使用 while 循环来迭代已知范围。相反,请使用
for in
循环。 - 不要输入 t3xtspk,它会让你的代码看起来像一个焦虑的青少年写的。自动完成功能将为您完成单词,因此您几乎不需要打字。使其简单易读。
我建议你自己做一些改变:
- 重命名
generateBtn
。函数/方法做事情,它们是 Action 。它们应该用动词或动词短语命名。也许可以尝试类似displayRandomArray
的东西。 - 将随机数组生成重构为其自己的方法。
- 重命名
RandomNum
。从表面上看,它根本不是一个数字,而是一个随机数生成器。也许尝试RandomNumberGenerator
- 重命名
h
。 - 添加代码来处理当
.text
为 nil 时发生的情况,或者当它包含不是 UInt32 的字符串(从而导致UInt32
初始化失败并返回nil
)
关于ios - 快速将数组放入标签中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38880900/