【问题标题】:Indexed array not printing elements in array索引数组不打印数组中的元素
【发布时间】:2017-10-31 13:46:12
【问题描述】:

我下面的代码试图在按下按钮时为数组中的每个新条目建立索引。所以当按下按钮时自动对元素进行排序。

          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")
            }
        }}

打印出来的就是[]。没有打印任何数字。

【问题讨论】:

    标签: arrays swift sorting


    【解决方案1】:

    最初 arrayOfInt 是空数组。所以它永远不会进入这个数组,因为数组是空的

      for num in arrayOfInt {
       //Whatever is here
      }
    

    无论你想要实现什么,你的逻辑也是错误的。

    Array 已经有 sort(by:(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")
            }
        }
    

    【讨论】:

    • arrayOfInt.sort { return $0 > $1 } return 关键字是多余的sort { $0 > $1 }。你也可以只使用sort(by: >)
    【解决方案2】:

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

    如果您使用 breakpointprint 语句 调试您的代码,则该问题本身就会显示出来。

    每次 guard 语句可以解决相同问题时,我都会避免使用 if let。基本上是因为它看起来更具可读性,而且它是一种 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
    

    【讨论】:

      猜你喜欢
      • 2012-05-13
      • 2013-06-21
      • 1970-01-01
      • 2017-04-08
      • 1970-01-01
      • 2011-03-23
      • 2020-12-21
      • 2014-06-23
      • 1970-01-01
      相关资源
      最近更新 更多