我一直在收到超出界限的索引错误。
我一直在处理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的颜色时发生错误。
应用程序崩溃我收到错误。
答案 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)