![](/img/trans.png)
[英]Program crashes on a specific value when i try to free() the arrays in a pointer array
[英]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.