代码之家  ›  专栏  ›  技术社区  ›  Julien W.

uilabel.text在最后一次循环执行之前未更改

  •  0
  • Julien W.  · 技术社区  · 6 年前

    我想为数组中的字符串每秒更改uilabel.text。

    为此,我编写了以下代码并将其放置在视图中。

    let countdown = ["3", "2", "1", "GO !"]
    
    for i in 0..<countdown.count {
        self.countdownStatus.text = countdown[i]
        sleep(1)
    }
    

    发生什么事了

    uilabel.text在4秒前不更改,然后获取数组的最后一个字符串。

    睡眠(1)

    睡眠(1)

    睡眠(1)

    睡眠(1)

    走!

    期望的是什么

    睡眠(1)

    睡眠(1)

    1个

    睡眠(1)

    走!

    睡眠(1)

    2 回复  |  直到 6 年前
        1
  •  2
  •   Satachito    6 年前

    DispatchQueue.global().async {
        let countdown = ["3", "2", "1", "GO !"]
    
        for i in 0..<countdown.count {
            DispatchQueue.main.async {
                self.countdownStatus.text = countdown[i]
            }
            sleep(1)
        }
    }
    
        2
  •  0
  •   Alec.    6 年前

    let myTimer : Timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.performCountdown), userInfo: nil, repeats: false)
    
    let countdown = ["3", "2", "1", "GO !"]
    var i = 0
    func performCountdown() {
        while i < 4{
            print(countdown[i])
            i = i+1
        }
    

    import Foundation
    import UIKit
    let countdown = ["3", "2", "1", "GO !"]
    DispatchQueue.global(qos: .background).async {
        for i in 0..<countdown.count {
            print(countdown[i])
            sleep(1)
        }
    
    }