【问题标题】:Cycle through array in iOS在 iOS 中循环遍历数组
【发布时间】:2016-01-26 22:09:53
【问题描述】:

在这个应用程序中,我将一个 NSOrderedSet 卡片保存到核心数据中的“主题”实体中,以便用户可以自行测验。卡片像时尚一样翻转和拖动,但在更新卡片方法中我遇到了一些麻烦。当前卡片显示正常,因为我在视图中设置了加载(NSOrderedSet 数组属性的第一张卡片)。但是,当我拖动和更新时,它会立即转到最后一张牌,例如,如果我在一副牌中有 5 张牌,它将从第一张开始,然后立即转到第五张。更新此方法以使其根据需要循环执行的最佳方法是什么?

我想我应该将 index 属性传递给它,例如 tableViewDelegate 方法,但是如果有人以前做过类似的事情并且有更好的方法,那将不胜感激。

一如既往地感谢您的帮助。

    func updateCard() {

    //cycle through questions here

    for var i = 0; i < (self.subject.cards?.count)!; i++ {

        self.currentCard = self.subject.cards?.array[i] as? Card
        self.draggableView.questionLabel.text = self.currentCard?.question
        self.draggableView.answerLabel.text = self.currentCard?.answer

    }
}

【问题讨论】:

  • google for % 运算符(modolo 或 rest 运算符)
  • 您的代码没有意义,它总是会设置与最后一张卡片对应的值,因为您在下一次迭代中覆盖了先前设置的值。你想在两者之间发生什么?答案可能是:不要使用循环。
  • 代码很有意义,但是正如您所说编译器会自动跳到最后一个索引,我知道问题出在哪里,但认为有一种方法可以逐个循环遍历数组。

标签: ios arrays swift core-data nsorderedset


【解决方案1】:

目前,当您调用 updateCard 时,for 循环正在以计算机速度进行计算,您只能看到最后一个索引。

这是一种选择:

在您的类中,设置一个名为 selectedCardIndex 的存储变量作为实现细节,然后在 updateCard 中增加和更新视图。

var selectedCardIndex = 0

func updateCard() {

    self.selectedCardIndex += 1
    self.currentCard = self.subject.cards?.array[self.selectedCardIndex] as? Card
    self.draggableView.questionLabel.text = self.currentCard?.question
    self.draggableView.answerLabel.text = self.currentCard?.answer

}

【讨论】:

    猜你喜欢
    • 2014-06-04
    • 1970-01-01
    • 2019-07-10
    • 2012-05-24
    • 2016-05-25
    • 2020-11-24
    • 1970-01-01
    相关资源
    最近更新 更多