Arrays swift中的迭代器正在跳过元素?
我使用迭代器在一组闪存卡中循环,但迭代器每隔一个循环,例如,我通过输入数字1-7作为新卡(按顺序)对其进行测试,但当我翻过卡片组时,它只显示2,然后是4,然后是6,然后返回到2。当我在函数中打印deckIterator时,它会返回一个相应的整数,因此对于Card2,迭代器会打印2。我不确定我使用的迭代器是否正确,有人能给我指出正确的方向吗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
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)不会导致它进行迭代。如果调用一个方法,不管是否捕获结果,该方法都会这样做。这可能在每种计算机语言中都是正确的。对,我是从链表的角度思考的,出于某种原因,你问了一个问题,答案是正确的。你应该接受一个答案并结束这件事。