我正在使用迭代器来循环浏览闪存卡阵列,但是迭代器正在相互切换,例如,我通过输入数字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
}
}
答案 0 :(得分:0)
每次您致电next()
时,我们都会进行迭代。因此,每次对getNextCardPlease
的调用都会重复两次。数一下:
if(deckIterator?.next() == nil){ // 1
fetchData()
} else {
let next = deckIterator?.next() // 2
答案 1 :(得分:0)
问题是一旦r
被调用,迭代器就会迭代。迭代器的工作方式不同于链表。