Итератор в swift пропускает элементы? - PullRequest
0 голосов
/ 21 сентября 2018

Я использую итераторы для циклического перебора массива флеш-карт, но итератор идет по другому, например, я проверил его, введя номера 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 голосов
/ 22 сентября 2018

Проблема была однажды вызвана if(deckIterator?.next() == nil), итератор повторяется.Итераторы не работают как связанные списки.

0 голосов
/ 22 сентября 2018

Каждый раз, когда вы звоните next(), мы повторяем.Таким образом, каждый вызов getNextCardPlease повторяется дважды.Подсчитайте их:

if(deckIterator?.next() == nil){ // 1
    fetchData()
} else {
    let next = deckIterator?.next() // 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...