Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays swift中的迭代器正在跳过元素?_Arrays_Swift_Iterator - Fatal编程技术网

Arrays swift中的迭代器正在跳过元素?

Arrays swift中的迭代器正在跳过元素?,arrays,swift,iterator,Arrays,Swift,Iterator,我使用迭代器在一组闪存卡中循环,但迭代器每隔一个循环,例如,我通过输入数字1-7作为新卡(按顺序)对其进行测试,但当我翻过卡片组时,它只显示2,然后是4,然后是6,然后返回到2。当我在函数中打印deckIterator时,它会返回一个相应的整数,因此对于Card2,迭代器会打印2。我不确定我使用的迭代器是否正确,有人能给我指出正确的方向吗 override func viewDidLoad() { super.viewDidLoad() fetchData() } func f

我使用迭代器在一组闪存卡中循环,但迭代器每隔一个循环,例如,我通过输入数字1-7作为新卡(按顺序)对其进行测试,但当我翻过卡片组时,它只显示2,然后是4,然后是6,然后返回到2。当我在函数中打印deckIterator时,它会返回一个相应的整数,因此对于Card2,迭代器会打印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
    }
}

每次调用
next()
,我们都会进行迭代。因此,对
getNextCardPlease
的每次调用都会迭代两次。数一数:

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

问题曾经是
如果(deckIterator?.next()==nil)
被调用,迭代器将进行迭代。迭代器的工作方式与链表不同。

谢谢,我对swift中的迭代器不是很了解,但从其他语言的经验来看,我认为(deckIterator?.next)不会导致它进行迭代。如果调用一个方法,不管是否捕获结果,该方法都会这样做。这可能在每种计算机语言中都是正确的。对,我是从链表的角度思考的,出于某种原因,你问了一个问题,答案是正确的。你应该接受一个答案并结束这件事。