【问题标题】:Swift iOS. Program crashes when i try to mutate an array of buttons斯威夫特 iOS。当我尝试改变一组按钮时程序崩溃
【发布时间】:2016-07-24 09:30:35
【问题描述】:

我有大约 20 个按钮链接到 allKeys。我希望 turnRed 按钮将其文本的颜色更改为红色。我尝试了以下代码:

    @IBOutlet var allKeys: [UIButton]!


    @IBAction func turnRed(sender: UIButton) {
        var i = allKeys.count

        repeat {
            allKeys[i].setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
        i -= 1
        } while i != -1
    }

当我按下 turnRed 按钮时,我的程序崩溃并且 xcode 跳转到 appDelegate 文件并突出显示带有错误 Thread1: signal SIGABRT 的 AppDelegate 类。

控制台显示“由于未捕获的异常'NSRangeException原因而终止应用程序:NSArrayI objectAtIndex

【问题讨论】:

    标签: arrays swift colors crash uibutton


    【解决方案1】:

    这里的问题是您将变量 i 设置为 allKeys.count,但由于 swift 中的数组从零开始,所以第 20 个元素实际上应该是 allKeys[19]。因此,当循环位于i = 20 时,它会尝试访问allKeys[20],这会导致应用程序崩溃。

    解决此问题的一种方法是将i 设置为allKeys.count - 1,但更好的方法是使用for-in 循环而不是repeat

    for key in allKeys {
        key.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
    }
    

    在 Swift 中有多种循环方式,您应该使用这些选项来发挥自己的优势。您可以找到 Apple 的 Control Flow 文档here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-24
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2021-01-02
      相关资源
      最近更新 更多