您好,我正在尝试获取一个数组并更新标签以每隔一秒显示数组中的每个元素。一个例子是我有数组 [3,6,2] ,我的标签将显示 3,然后等待一秒钟,显示 6,然后等待一秒钟,显示 2。我见过很多带有更新函数的 NSTimer 示例,它们执行类似的操作但仅对数字进行增量,从不尝试解析数组。有人可以帮忙吗?
更新
我正在 UIButton 中调用计时器,但遇到了问题。计时器工作正常,但计时器下按钮功能中的代码在计时器和更新功能之前运行。我下面的代码生成一个随机数字数组,然后应该每隔一秒显示它们。它这样做是正确的,但我的计时器下的打印语句在更新并显示教科书中的数字之前正在运行。我不知道为什么?计时器是否在不同的线程上运行?
func updateCountdown() {
if(numbersIndex <= numberLimit){
self.counter.text = String(numbers[numbersIndex])
}else if(numbersIndex == numberLimit+1){
self.counter.text = ""
}else{
timer!.invalidate()
timer=nil
}
numbersIndex+=1
}
@IBAction func startButton(_ sender: AnyObject){
startB.setTitle("", for: .normal)
var highestLength = 3
//for trialNumber in 0...11{
var numberSequence = Array(repeating:11, count: highestLength)
for count in 0...highestLength-1{
var randomNumber = Int(arc4random_uniform(10))
if(count>0){
while(numberSequence.contains(randomNumber) || randomNumber-1 == numberSequence[count-1]){
randomNumber = Int(arc4random_uniform(10))
}
}
numberSequence[count] = randomNumber
}
print(numberSequence)
self.numbers = numberSequence
self.numbersIndex = 0
self.numberLimit = numberSequence.count-1
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateCountdown), userInfo: nil, repeats: true)
print("this should be last")
//do other stuff too
//}
}
最佳答案
你可以做这样的事情。
var counter = 0
var list: [String] = ["Eggs", "Milk"]
override func viewDidLoad() {
super.viewDidLoad()
var timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(self.update), userInfo: nil, repeats: true)
}
func update() {
label.text = "\(list[counter])"
counter += 1
if (counter >= list.count) {
counter = 0
}
}
假设您的标签名称是 label
关于arrays - Swift 中的 NSTimer 将标签设为数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44057253/