将数组放入swift标签中

时间:2016-08-10 18:24:26

标签: ios swift labels 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)

    }    
}

我不知道这段代码有什么问题。我正在尝试将字符串显示放入标签中,并打印出随机数生成器中的最后一个数字。当我将它打印到控制台时,它会显示所有随机数。

1 个答案:

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

  1. 不要强行打开包装。使用if letguard let绑定来安全地处理nil值。
  2. 为变量提供有意义的名称。除特定情况外,请避免使用单字母名称。
  3. 不要在函数/方法名称和前面括号旁边放置空格。
  4. 不要使用while循环迭代已知范围。相反,请使用for in循环。
  5. 不要输入t3xtspk,它是你的代码看起来像一个愤怒的teenagr写道。自动完成功能会为您完成单词,因此您几乎不会输入任何内容。让它变得简单易读。
  6. 我建议你自己做一些改变:

    1. 重命名generateBtn。功能/方法做事,他们是行动。它们应该用动词或动词短语命名。也许尝试displayRandomArray
    2. 之类的东西
    3. 将随机数组生成重构为自己的方法。
    4. 重命名RandomNum。根据它的外观,它根本不是一个数字,它是一个随机数生成器。也许试试RandomNumberGenerator
    5. 重命名h
    6. 添加代码以处理.text为零时发生的情况,或者当它包含不是UInt32的字符串时会发生什么(从而导致UInt32初始化程序失败并返回{{ 1}})