快速迭代器是否正在跳过元素?

时间:2018-09-21 20:53:13

标签: arrays swift iterator

我正在使用迭代器来循环浏览闪存卡阵列,但是迭代器正在相互切换,例如,我通过输入数字1-7作为新卡(按顺序)进行了测试,但是当我翻阅闪存卡时,卡纸它只显示2,然后是4,然后是6,然后返回2。当我在函数中打印出deckIterator时,它会返回一个对应的整数,因此对于卡2,迭代器将显示2。正确使用迭代器,有人能指出我正确的方向吗?

override func viewDidLoad() {
    super.viewDidLoad()
    fetchData()
}

func fetchData() {
    deckArray.removeAll()
    deckIterator = nil
    do {
        fetched = try context.fetch(Card.fetchRequest())
        for each in fetched {
            let term = each.term
            let definition = each.definition
            termLabel.text = each.term!
            definitionLabel.text = each.definition!
            let Card = card(term: term!, definition: definition!)
            deckArray.append(Card)
        }
    } catch {
        print(error)
    }
    deckIterator = deckArray.makeIterator()
}

@IBAction func leftSwipe(_ sender: UISwipeGestureRecognizer) {
    getNextCardPlease()
    self.definitionLabel.isHidden = true
    alreadyFlipped = false
}

func getNextCardPlease(){
    if(deckIterator?.next() == nil){
        fetchData()
    } else {
        let next = deckIterator?.next()
        termLabel.text = next?.term
        definitionLabel.text = next?.definition
    }
}

2 个答案:

答案 0 :(得分:0)

每次您致电next()时,我们都会进行迭代。因此,每次对getNextCardPlease的调用都会重复两次。数一下:

if(deckIterator?.next() == nil){ // 1
    fetchData()
} else {
    let next = deckIterator?.next() // 2

答案 1 :(得分:0)

问题是一旦r被调用,迭代器就会迭代。迭代器的工作方式不同于链表。