簡體   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