ios - 快速将数组放入标签中

标签 ios swift label arc4random

@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 绑定(bind)来安全地处理 nil 值。
  2. 为变量指定有意义的名称。除特定情况外,避免使用单字母名称。
  3. 不要在函数/方法名称和前面的括号旁边添加空格。
  4. 不要使用 while 循环来迭代已知范围。相反,请使用 for in 循环。
  5. 不要输入 t3xtspk,它会让你的代码看起来像一个焦虑的青少年写的。自动完成功能将为您完成单词,因此您几乎不需要打字。使其简单易读。

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

  1. 重命名generateBtn。函数/方法做事情,它们是 Action 。它们应该用动词或动词短语命名。也许可以尝试类似 displayRandomArray 的东西。
  2. 将随机数组生成重构为其自己的方法。
  3. 重命名RandomNum。从表面上看,它根本不是一个数字,而是一个随机数生成器。也许尝试RandomNumberGenerator
  4. 重命名h
  5. 添加代码来处理当 .text 为 nil 时发生的情况,或者当它包含不是 UInt32 的字符串(从而导致 UInt32初始化失败并返回nil)

关于ios - 快速将数组放入标签中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38880900/

相关文章:

ios - 如何完全禁用 UIWebView iOS9 的放大镜

objective-c - 在 Core Data 中 10 秒后终止任务

swift - 开/关按钮多次切换

ios - 快速 pushViewController 内存

ios - "Application Loader"无法选择 .app 文件 adobe air

objective-c - 在 Swift 中为 NSOutputStream 设置 TCP_NODELAY

迭代器停止后,Java 不会更改接口(interface)上的值

excel - 如何使用 VBA 在表单上动态添加单选按钮

jquery - 如何使用Chart.js显示折线图数据集点标签?

ios - 如何在 iOS 上检索 Facebook id