将数组放入 swift 中的标签

Putting array into label in swift

@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 最佳实践和约定:

  1. 不要强制解包。使用 if letguard let 绑定来安全地处理 nil 值。
  2. 给你的变量起有意义的名字。除特定情况外,避免使用单字母名称。
  3. 不要在 function/method 名称和前面的括号旁放置空格。
  4. 不要使用 while 循环遍历已知范围。相反,使用 for in 循环。
  5. 不要输入 t3xtspk,它让你的代码看起来像是一个愤怒的青少年写的。自动完成会为您完成单词,因此您几乎不会打字。使其简单易读。

我建议你自己做一些改变:

  1. 重命名 generateBtn。 Functions/methods 做事,就是行动。它们应该用动词或动词短语命名。也许尝试 displayRandomArray.
  2. 将随机数组生成重构为它自己的方法。
  3. 重命名 RandomNum。看样子,根本不是数字,是随机数generator。也许试试 RandomNumberGenerator
  4. 重命名 h.
  5. 添加代码来处理当 .text 为 nil 时发生的情况,或者当它包含不是 UInt32 的字符串时发生的情况(从而导致 UInt32 初始化程序失败并且 return nil)