索引数组不在数组中打印元素

时间:2017-10-31 13:46:12

标签: arrays swift sorting

下面的代码尝试在按下按钮时为数组的每个新条目编制索引。因此,在按下按钮时自动对元素进行排序。

          var arrayOfInt = [Int]()
    @IBAction func submitText(_ sender: Any) {
        if let text = enterText.text {
            if let number = Int(text) {
                var index = 0
                for num in arrayOfInt {
                    if num > number {
                        arrayOfInt.insert(number, at: index)
                        break
                    }
                    index += 1
                }
                print(arrayOfInt)
            } else {
                print("Please enter number")
            }
        }}

打印时,这就是[]。没有打印数字。

2 个答案:

答案 0 :(得分:0)

最初arrayOfInt是空数组。因此,当数组为空时,它永远不会进入内部

  for num in arrayOfInt {
   //Whatever is here
  }

无论你想要达到什么目标,你的逻辑也是错误的。

数组已经排序(通过:(Element,Element) - > Bool)方法 您最好按如下方式编写代码: -

 var arrayOfInt = [Int]()
@IBAction func submitText(_ sender: Any) {
    if let text = enterText.text , let number = Int(text) {
            arrayOfInt.append(number)
            arrayOfInt.sort { return $0 > $1 } //Modify accordingly the order you want

            print(arrayOfInt)
        } else {
            print("Please enter number")
        }
    }

答案 1 :(得分:0)

你的 arrayOfInt 变量没有元素,它是空的...所以 for 循环不会迭代零索引数组,它没有意义......这就是为什么大括号内的代码永远不会执行的原因。

如果您使用断点或使用打印声明调试代码,则此问题本身就会显示出来。

每次 guard 语句解决相同问题时,我会避免使用 if 。基本上是因为它看起来更具可读性,而且它是Swift方法的一种......同时你正在避开pyramid of doom

我的建议是:

var arrayOfInt = [Int]()

@IBAction func submitText(_ sender: Any) {

    guard let text = enterText.text else {

        print("Please enter a number")

        return

    } // guard

    guard let number = Int(text) else {

        print("Can't creates an integer value from the given string.")

        return

    } // guard

    arrayOfInt.append(number)

    arrayOfInt.sort() // From lowest to highest by default.

    //arrayOfInt.sort { $0 < $1 } // From lowest to highest using a higher order function.

    //arrayOfInt.sort { $0 > $1 } // From highest to lowest using a higher order function.

} // submitText