【问题标题】:Populating Array in Swift 4 with for-loop without using the index在Swift 4中使用for循环填充数组而不使用索引
【发布时间】:2018-04-29 11:46:39
【问题描述】:

我需要使用 for 循环填充一个数组(已经声明和初始化),以便创建确定数量的项目。

我最终得到了以下代码:

    func createValues() -> Array<Int> {

        let usableRange:Range = 6..<11;

        var arrayOfValues: Array<Int>=[]; //Array declared and initialized

        for i in 0..<10 {

            arrayOfValues.append(random(usableRange));

            print(arrayOfValues[i]);

        }

        return arrayOfValues;
    }

这段代码符合我的预期。但是,一旦我注释掉该行

 print(arrayOfValues[i]);

Xcode 抛出以下警告:

从未使用过不可变值“i”;考虑替换为“_”或 删除它

如果我接受建议,代码可以工作,但不如以前那么好。

我刚刚从 Obj-C 过渡到 Swift,我真的不知道应该采用什么正确的方法。任何帮助,将不胜感激。提前致谢。

附:我知道我不再需要分号了,但我想旧习惯很难改掉……

【问题讨论】:

  • “没有以前那么好了。”为什么不?唯一的区别是它不打印任何东西
  • 请学习阅读和理解错误/警告信息。这是最容易理解的之一。
  • 好吧,通过按下一个按钮,代码应该在一个范围内生成随机数。如果给定数字的平均值不是范围的平均值,它将生成新数字,直到它生成。这一切都很好,但是当我将 'i' 替换为 _ 时,我必须多次按下按钮,直到我在控制台上打印出一些东西。我现在正在调试它,看看问题出在哪里......
  • @vadian 我理解警告很好。问题是如何以正确的无警告方式做我想做的事
  • 正如 Leo 已经提到的,代码的作用完全相同(创建 10 个随机数),只是它不会在循环中打印任何内容。

标签: arrays swift macos for-loop


【解决方案1】:

由于不用i,所以直接写

for _ in 0 ..< 10

_ 表示“是的,有一个值,但我不在乎”,在这里和许多其他情况下。

【讨论】:

    【解决方案2】:

    如果您只想为您的代码提供一个很好的替代方案,我会为您提供:

    var i: Int = 0
    
    while i < 10 {
    
      arrayOfValues.append(random(usableRange))
      i += 1
    
    }
    

    【讨论】:

      【解决方案3】:

      如果目标是生成给定范围内的随机数数组,我建议您直接生成它。不需要for 循环。

      let usableRange = UInt32(6)..<UInt32(11)
      let arr = (0..<10).map { _ in Int(
          arc4random_uniform(usableRange.upperBound - usableRange.lowerBound) 
          + usableRange.lowerBound
      )}
      

      【讨论】:

        【解决方案4】:

        Array 有一个指定的初始化器,它初始化一个给定大小和重复值的数组:

        let values = Array(repeating: "VALUE", count: 5)
        print(fiveZs)
        // Prints "["VALUE", "VALUE", "VALUE", "VALUE", "VALUE"]"
        

        来源:Apple Documentation

        【讨论】:

          猜你喜欢
          • 2014-04-09
          • 2022-09-29
          • 1970-01-01
          • 1970-01-01
          • 2023-03-08
          • 2013-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多