错误:索引超出范围

时间:2016-04-15 15:53:35

标签: ios arrays swift

我一直在收到超出界限的索引错误。

我一直在处理ZLSwipeableView Swift版本。

代码

 import UIKit

   class SwipeableViewController: UIViewController  {

         var swipeAbleView : ZLSwipeableView!

                override func viewDidLayoutSubviews() {
                    super.viewDidLayoutSubviews()
                    swipeAbleView.nextView = {
                     return self.nextCardView()
                    }
                }

// This is the colors array
                var colors : NSArray = NSArray(array: [UIColor.orangeColor() , UIColor.blueColor() , UIColor.greenColor() , UIColor.blackColor() , UIColor.brownColor() , UIColor.magentaColor()])

             var v : UIView!

             var cardsCount = 6
             var cardsIndex = 0

              override func viewDidLoad() {
                    super.viewDidLoad()

                    // Do any additional setup after loading the view.

                    view.backgroundColor = UIColor.whiteColor()
                    view.clipsToBounds = true

                    swipeAbleView = ZLSwipeableView()
                    swipeAbleView.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)
                    self.swipeAbleView.alpha = 0.0

                    UIView.animateWithDuration (0.25, delay: 0.35, options: UIViewAnimationOptions.CurveLinear ,animations: {
                        self.swipeAbleView.alpha = 1.0
                        }, completion:nil)
                    self.view.addSubview(swipeAbleView)


                    self.swipeAbleView.discardViews()
                    self.swipeAbleView.loadViews()
                }

                func nextCardView() -> UIView {

                    if cardsIndex < cardsCount {

                    cardsIndex += 1
                    }

                    let cardView = CardView(frame: self.swipeAbleView.bounds)
// The error occurs here and the app crashes
                    cardView.backgroundColor = colors[cardsIndex] as? UIColor

                    return cardView

                }
            }

定义cardView的颜色时发生错误。

应用程序崩溃我收到错误。

2 个答案:

答案 0 :(得分:3)

if cardsIndex < cardsCount {
    cardsIndex += 1
}

这种情况不会阻止你越过界限,正确的条件是:

if cardsIndex + 1 < cardsCount {
    cardsIndex += 1
}

虽然从viewDidLayoutSubviews更改数据我会觉得很奇怪。

答案 1 :(得分:0)

这里明确的答案是写一个整数的扩展来压缩值

extension Int {
    func clamp(minRange: Int, maxRange: Int) {
        self = min(maxRange, self)
        self = max(minRange, self)
    }
}

然后这样做

cardsIndex.clamp(0, cardsIndex + 1)