繁体   English   中英

Swift iOS。 当我尝试更改按钮数组时,程序崩溃

[英]Swift iOS. Program crashes when i try to mutate an array of buttons

我有大约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文件,并突出显示AppDelegate类,错误为Thread1:signal SIGABRT。

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

这里的问题是,您将变量i设置为allKeys.count ,但是由于swift中的数组从零开始,因此第二十个元素实际上应该是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文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM