2017-05-24 72 views
0

假设有一个数组:如何通过按钮按下数组中的项目?

var items = ["first", "second", "third"] 

每按下一个按钮,它应该去的下一个项目在数组中的时间。

@IBAction func buttonPressed(_ sender: Any) { 
label.text = currentItem 
     } 

我已经用在循环尝试,但它只是通过整个数组去一次:

for item in items { 
print(item) 
} 

如何拥有它,所以它只是通过数组中的一个项目开始在一个时间?

+0

有一个整数索引属性,并在每次按下按钮后增加它。 – Paulw11

+0

刚刚发布了一个示例 –

+0

@ Paulw11你会如何去做类似的事情? – SwiftyJD

回答

1

你想要的是维护一个你正在查看的索引的变量。然后,您可以通过它的索引来引用该项目。你会想确保你不会出界。这可以很容易地用模数来完成。

E.g.

var items = ["first", "second", "third"] 
var index = 0 

@IBAction func buttonPressed(_ sender: Any) { 
     label.text = items[index] 
     index = (index + 1) % items.count 
} 

编辑:二进制鸭嘴兽的答案是更好的比我

1

只需跟踪一个计数器。应该非常简单。例如:

var items = ["first", "second", "third"] 
var currentIndex: Int = 0 { 
    didSet { 
     currentIndex = currentIndex % items.count 
    } 
} 

@IBAction func buttonPressed(_ sender: Any) { 
    label.text = items[currentIndex] 
    currentIndex += 1 
} 
0

一种方式围绕保持变量生活在那里(和搞乱你的代码)是只获取当前对象的索引,并返回下一个还是第一位的,是这样的:

@IBAction func buttonPressed(_ sender: Any) { 
    guard let text = label.text, let index = items.index(of: text) else { return } 
    label.text = index + 1 < items.count ? items[index + 1] : items[0] 
} 

这使得它让你的特性是干净了一点,它使你的代码更容易一些跟随,我想。

+0

虽然这会起作用,但随着数组变得更大,此方法会变慢。 – Benhamine

+0

确实如此,但我假设他不想用2 mill条目的数组来使用它。这是关于它需要多少才能使其明显变慢。 –